MySql ALTER TABLE 敘述句 (SQL ALTER TABLE Statement)

增加欄位 (ADD COLUMN)

ALTER TABLE 是用來對已存在的資料表結構作更改

1
2
3
4
5
ALTER TABLE 資料名名稱 ADD 欄位名稱column_name datatype;
//例如新增createdAt 欄位
ALTER TABLE tests ADD createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
//例如新增discount 欄位
ALTER TABLE users ADD discount DECIMAL(10, 2);
新增createdAt 欄位
新增discount 欄位
新增discount 欄位Sucess

刪除欄位 (DROP COLUMN)

1
2
3
ALTER TABLE 資料名名稱 DROP COLUMN 欄位名稱column_name;
//刪除discount 欄位
ALTER TABLE users DROP discount;
刪除discount 欄位Sucess

MySql AS (Alias、別名) (SQL Alias)

AS (Alias、別名) (SQL Alias)

SQL 中我們可以替資料表或欄位名稱取一個別名 (Alias),這可以使名稱複雜的 SQL 查詢語句更易讀且可以有更直觀的查詢結果。

1
SELECT `Name` AS `C_Name`, `City` AS `C_City`,`Salary` FROM `customers`;

Example

1
SELECT o.Product, SUM(o.Quantity) AS Total FROM orders AS o GROUP BY o.Product;

MySql 建立資料庫與創建資料表

建立資料庫

1
create 資料庫名稱;

創建table

1
2
3
4
5
6
CREATE TABLE table_name (
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
···
);

建立一個 “customers” 資料表,其中包含這幾個欄位 - C_Id, Name, Address, Phone:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CREATE TABLE `users` ( 
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
uId INT NOT NULL UNIQUE,
userName VARCHAR(30) NOT NULL,
userEmail VARCHAR(50) NOT NULL,
userPassword VARCHAR(30) NOT NULL,
userPhone VARCHAR(10) NOT NULL,
roleId INT NOT NULL,
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deletedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE `users` (
id INT NOT NULL AUTO_INCREMENT,
uId INT NOT NULL,
userName VARCHAR(50) NOT NULL,
userEmail VARCHAR(30)NOT NULL,
userPassword VARCHAR(30) NOT NULL,
userPhone VARCHAR(10) NOT NULL,
roleId INT NOT NULL,
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deletedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY (id),
UNIQUE (uId)
);

MySql Tables 操作(創建/查看 /刪除)

建立資料庫

1
2
3
4
5
6
7
8
9
10
11
12
13
create database demo_db;
Query OK, 1 row affected (0.00 sec)
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| demo_db |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
  • create table創建單一table
  • show tables查看所有tables
  • show columns tables from tableName查看單一table
  • desc tableName 查看單一table
  • drop table tableName刪除單一table

創建table

1
2
3
4
5
//使用資料庫
use demo_db
//建立table
create table person(name varchar(20),phone varchar(20),age int);
Query OK, 0 rows affected (0.04 sec)

查看剛剛新增的table

1
2
3
4
5
6
7
8
9
10
//指令
desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

show tables 查看所有tables

1
2
3
4
5
6
7
show tables;
+-------------------+
| Tables_in_demo_db |
+-------------------+
| person |
+-------------------+
1 row in set (0.00 sec)

show columns tables from tableName(查看單一table)

1
2
3
4
5
6
7
8
show columns from person;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+

drop table tableName(刪除table)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
show tables;
+-------------------+
| Tables_in_demo_db |
+-------------------+
| person |
| products |
+-------------------+
2 rows in set (0.00 sec)

//刪除table
drop table products;
Query OK, 0 rows affected (0.01 sec)

show tables;
+-------------------+
| Tables_in_demo_db |
+-------------------+
| person |
+-------------------+
1 row in set (0.00 sec)

MySql Tables 基本觀念與數據類型

Tables 基本觀念

  • 一個Databases 是多個Table 組成。
    A Database is just a bunch of tables.
  • 表以結構化格式儲存資料。
    Tables hold the data in structured format.

Data Type

Numeric Types (數字類型)

  • BIT(size)位值類型。 每個值的位數在大小中指定。 size 參數可以儲存 1 到 64 之間的值。size 的預設值為 1。
  • TINYINT:一個非常小的整數。 有符號範圍是從 -128 到 127。無符號範圍是從 0 到 255。size 參數指定最大顯示寬度(即 255)
  • BOOL:零被視為假,非零值被視為真。
  • BOOLEAN:等於布林值
  • SMALLINT(size):一個小整數。 有符號範圍是從 -32768 到 32767。無符號範圍是從 0 到 65535。size 參數指定最大顯示寬度(即 255)
  • MEDIUMINT:一個中等整數。 有符號範圍是從 -8388608 到 8388607。無符號範圍是從 0 到 16777215。size 參數指定最大顯示寬度(即 255)
  • INT:一個中等整數。 有符號範圍是從-2147483648到2147483647。無符號範圍是從0到4294967295。size參數指定最大顯示寬度(即255)
  • INTEGER(size):等於中等整數
  • BIGINT(size):一個大整數。 有符號範圍是從 -9223372036854775808 到 9223372036854775807。無符號範圍是從 0 到 18446744073709551615。size 到 18446744073709551615。size 到 18446744073709551615。
  • FLOAT:浮點數。 總位數在大小中指定。 小數點後的位數在 d 參數中指定。 此語法在 MySQL 8.0.17 中已棄用,並將在未來的 MySQL 版本中刪除
  • DOUBLE(size, d):正常大小的浮點數。 總位數在大小中指定。 小數點後的位數在d參數中指定
  • DECIMAL(size, d):精確的定點數。 總位數在大小中指定。 小數點後的位數在 d 參數中指定。 size 的最大數量為 65。d 的最大數量為 30。size 的預設值為 10。d 的預設值為 0。
  • DEC(size, d):等於精確的定點數

String Types (字符類型)

  • CHAR:固定長度字串(可以包含字母、數字和特殊字元)。 size 參數指定列長度(以字元為單位)- 可以是從 0 到 255。
  • VARCHAR:可變長度字串(可以包含字母、數字和特殊字元)。 size 參數指定最大列長度(以字元為單位) - 可以是從 0 到 65535
  • BINARY:等於 CHAR(),但儲存二進位位元組字串。 size 參數指定列長度(以位元組為單位)。預設值為 1
  • VARBINARY:等於 VARCHAR(),但儲存二進位位元組字串。 size 參數指定最大列長度(以位元組為單位)。
  • TINYBLOB:對於 BLOB(二進位大型物件)。最大長度:255 位元組
  • TINYTEXT:儲存最大長度為 255 個字元的字串
  • TEXT(size):保存最大長度為 65,535 位元組的字串
  • BLOB(size):對於 BLOB(二進位大型物件)。最多可容納 65,535 位元組的數據
  • MEDIUMTEXT:保存最大長度為 16,777,215 個字元的字串
  • MEDIUMBLOB:對於 BLOB(二進位大型物件)。最多可容納 16,777,215 位元組的數據
  • LONGTEXT:保存最大長度為 4,294,967,295 個字元的字串
  • LONGBLOB:對於 BLOB(二進位大型物件)。最多可容納 4,294,967,295 位元組的數據
  • ENUM(val1, val2, val3, ...):只能有一個值的字串對象,該值是從可能值列表中選擇的。您最多可以在 ENUM 清單中列出 65535 個值。如果插入的值不在清單中,則會插入空白值。這些值會按照您輸入的順序排序
  • SET(val1, val2, val3, ...):一個字串對象,可以有 0 個或多個從可能值清單中選擇的值。您可以在 SET 清單中列出最多 64 個值

Date Types

  • DATE:A date. Format: YYYY-MM-DD. The supported range is from '1000-01-01' to '9999-12-31' 格式:年-月-日。支援的範圍是從“1000-01-01”到“9999-12-31”
  • DATETIME:日期和時間的組合。格式:YYYY-MM-DD hh:mm:ss。支援的範圍是從“1000-01-01 00:00:00”到“9999-12-31 23:59:59”。在列定義中新增 DEFAULT 和 ON UPDATE 以自動初始化並更新至目前日期和時間
  • TIMESTAMP:一個時間戳。 TIMESTAMP 值儲存為自 Unix 紀元 ('1970-01-01 00:00:00' UTC) 以來的秒數。格式:YYYY-MM-DD hh:mm:ss。支援的範圍是從“1970-01-01 00:00:01”UTC 到“2038-01-09 03:14:07”UTC。可以在列定義中使用 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 指定自動初始化和更新到目前日期和時間
  • TIME:一次。格式:時:分:秒。支援的範圍是從“-838:59:59”到“838:59:59”
  • YEAR:四位數格式的年份。允許的四位數字格式值:1901 到 2155 和 0000。 MySQL 8.0 不支援兩位數格式的年份。

參考w3schools MySQL Data Types

MySql Database 與Tables 基本操作

Database 與 Tables

Database有多的Tables
Tables是存取數據的地方,有一定的結構

Database Level

  • show databases
  • create database
  • drop database
  • use database
  • select database
  • 啟動MySQL
    1
    2
    sudo /usr/local/mysql/support-files/mysql.server start
    使用系統密碼
  • 連接 MySQL 伺服器與 MySQL 用戶端
    1
    2
    /usr/local/mysql/bin/mysql -u root -h 127.0.0.1 -p
    密碼

show databases 展示所有Db

1
2
3
4
5
6
7
8
9
10
11
show databases;
SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

information_schema,mysql,performance_schema,sys 為默認

create database 創建Db

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create database test_db;
Query OK, 1 row affected (0.00 sec)

//result
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_db |
+--------------------+
5 rows in set (0.00 sec)

資料庫內多了一個剛剛創建的test_db

use test_db

默認並沒使用任何Database

1
2
use test_db;
Database changed

select database()

1
2
3
4
5
6
7
select database();
+------------+
| database() |
+------------+
| test_db |
+------------+
1 row in set (0.00 sec)

如果沒有被 use => select database()
默認並沒使用任何Database 為NULL

1
2
3
4
5
6
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)

drop database 刪除數據庫名稱

1
2
3
4
5
6
7
8
9
10
11
12
drop database test_db;
Query OK, 0 rows affected (0.02 sec)
//result
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)

分號在MySql :結束應該去執行=>可改變的

Delay
修改不使用分號改為$$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
delimiter $$ 

show databases $$;

+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)

delimiter ;
當前有效
show databases $$;
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)

使用KeyWord大寫

MySql mac 安裝

MySQl 下載

確認自己的電腦系統設備:
到官網下載
MySQL 8.0 可支援您的資料庫伺服器平台
% : macOS 15 or macOS 14
選擇 Community Server for mac 5.7.29dmg 版本

安裝=>按照安裝精靈指示

簡介 許可證=>同意 選取目標 安裝類型 安裝權限密碼 獲得安裝權限 獲得初始root密碼 ### mac系統與MySQL控制版面

終端機MySQL指令

啟動MySQL

1
sudo /usr/local/mysql/support-files/mysql.server start
停止MySQL
1
sudo /usr/local/mysql/support-files/mysql.server stop

重新啟動MySQL

1
sudo /usr/local/mysql/support-files/mysql.server restart

連接 MySQL 伺服器與 MySQL 用戶端
Connect MySQL Server with MySQL Client

1
2
/usr/local/mysql/bin/mysql -u root -h 127.0.0.1 -p
密碼

重置密碼 Reset Password (當然要先連接 MySQL 伺服器與 MySQL 用戶端)

1
ALTER USER 'root'@'localhost' IDENTIFIED BY '重置密碼';

初次MySQL使用

STEP1 到MySQL目錄

1
cd /usr/local/mysql/support-files

STEP2 啟動MySQL

1
2
3
4
5
sudo ./mysql.server start
Password:系統密碼
Starting MySQL
Logging to '/usr/local/mysql/data/larahuangde-MacBook-Pro.local.err'.
SUCCESS!

STEP3 cd .. 查看mysql目錄 ls

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cd .. 

larahuang@larahuangde-MacBook-Pro mysql % ls

LICENSE data keyring share
README docs lib support-files
bin include man

cd bin //到bin 資料夾
innochecksum mysqlbinlog
lz4_decompress mysqlcheck
my_print_defaults mysqld
myisam_ftdump mysqld-debug
myisamchk mysqld_multi
myisamlog mysqld_safe
myisampack mysqldump
mysql mysqldumpslow
mysql_client_test_embedded mysqlimport
mysql_config mysqlpump
mysql_config_editor mysqlshow
mysql_embedded mysqlslap
mysql_install_db mysqltest_embedded
mysql_plugin mysqlxtest
mysql_secure_installation perror
mysql_ssl_rsa_setup replace
mysql_tzinfo_to_sql resolve_stack_dump
mysql_upgrade resolveip
mysqladmin zlib_decompress

STEP4 登入mysql =>Welcome to the MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
./mysql -u root -h 127.0.0.1 -p

Enter password: 初次安裝時的密碼
//進入MySQL version: 5.7.29
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.29

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

STEP5 更改密碼指令

1
2
3
4
5
6
7
8
//一定要分號
ALTER USER 'root'@'localhost' IDENTIFIED BY '重置密碼';
Query OK, 0 rows affected (0.01 sec)
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALTER USER 'root'@'localhost' IDENTIFIED by '新密碼''

//退出
exit
Bye

如何卸載MySQL(終端機指令)

1
2
3
4
5
6
7
sudo rm -rf /usr/local/var/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /private/var/db/receipts/*mysql*

js 當地時鐘

Html 寫入一個 canvas,js 綁定

1
2
3
4
5
<div class="container">
<div class="content">
<canvas class="canvas" width="500" height="500" ></canvas>
</div>
</div>

js 綁定標籤 canvas,使用其getContext()方法

檢查支援

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
var canvas = document.querySelector("canvas");
const ctx = canvas.getContext("2d");
//檢查支援
if (canvas.getContext) {
var ctx = canvas.getContext("2d");
var radius = canvas.height / 2;
console.log('radius1',radius)
ctx.translate(radius, radius);
radius = radius * 0.90
console.log('radius2',radius * 0.90)
//每一秒執行一次函式
setInterval(drawClock, 1000);
}


function drawClock() {
drawFace(ctx, radius);
drawNumbers(ctx, radius);
drawTime(ctx, radius);
}

//塞入時鐘圖案
function drawFace(ctx, radius) {
var grad;
ctx.beginPath();
ctx.arc(0, 0, radius, 0, 2*Math.PI);
ctx.fillStyle = 'white';
ctx.fill();
ctx.strokeStyle = '#00bcd4'; //外框顏色
ctx.lineWidth = radius*0.1;
ctx.stroke();
ctx.beginPath();
ctx.arc(0, 0, radius*0.1, 0, 2*Math.PI);
ctx.fillStyle = '#00bcd4';//中心點顏色
ctx.fill();
}

//塞入1~12的字樣
function drawNumbers(ctx, radius) {
var ang;
var num;
ctx.font = radius*0.15 + "px arial";
ctx.textBaseline="middle";
ctx.textAlign="center";
for(num = 1; num < 13; num++){
ang = num * Math.PI / 6;
ctx.rotate(ang);
ctx.fillStyle = '#3333';//小時的顏色
ctx.translate(0, -radius*0.85);
ctx.rotate(-ang);
ctx.fillText(num.toString(), 0, 0);
ctx.rotate(ang);
ctx.translate(0, radius*0.85);
ctx.rotate(-ang);
}
}


function drawTime(ctx, radius){
var now = new Date();
var hour = now.getHours();
var minute = now.getMinutes();
var second = now.getSeconds();
//hour
hour=hour%12;
hour=(hour*Math.PI/6)+
(minute*Math.PI/(6*60))+
(second*Math.PI/(360*60));
drawHand(ctx, hour, radius*0.5, radius*0.07);
//minute
minute=(minute*Math.PI/30)+(second*Math.PI/(30*60));
drawHand(ctx, minute, radius*0.8, radius*0.07);
// second
second=(second*Math.PI/30);
drawHand(ctx, second, radius*0.9, radius*0.02);
}


function drawHand(ctx, pos, length, width) {
ctx.beginPath();
ctx.strokeStyle = '#3f51b5';//指針顏色
ctx.lineWidth = width;
ctx.lineCap = "round";
ctx.moveTo(0,0);
ctx.rotate(pos);
ctx.lineTo(0, -length);
ctx.stroke();
ctx.rotate(-pos);
}

Canvas Clock Face (畫布時鐘圖案)
Canvas Clock Numbers(畫布時鐘數字)
畫布啟動時鐘