表定義 只有成功創建資料庫後,才能創建數據表,數據表是欄位的集合,在表中數據按行和列的格式存儲 創建表 MySQL 使用 CREATE TABLE 創建表。其中有多個選擇,主要由表創建定義(create definition)、表選項定義(table options) 和區分選項(partition ...
表定義
只有成功創建資料庫後,才能創建數據表,數據表是欄位的集合,在表中數據按行和列的格式存儲
創建表
MySQL 使用 CREATE TABLE 創建表。其中有多個選擇,主要由表創建定義(create definition)、表選項定義(table options) 和區分選項(partition options)等內容構成。
表創建定義:由表列的名字、列的定義集可能的一個空值聲明、一個完整性約束或表索引項組成,表索引項主要定義表的索引、主鍵、外鍵等。
語法結構:
CREATE[TEMPORARY]TABLE tbl_name
(
欄位名|數據類型[列級完整性約束條件][預設值]
[,欄位名2 數據類型[列級完整性約束條件][預設值]]
[,....]
[,表級完整性約束條件]
)[ENGINE=引擎類型]
Example:
新建一個客戶信息
mysql> USE mysql_test
Database changed
mysql> CRATE TABLE customers
->(
-> cust_id INT NOT NULL AUTO_INCREMENT,
-> cust_name CHAR(50) NOT NULL,
-> cust_sex CHAR(1) NOT NULL DEFAULT 0,
-> cust_address CHAR(50) NULL
-> cust_contact CHAR(50) NULL
-> PRIMARY KEY(CUST_ID)
->)
Query OK, 0 rows affected(0.11 sec)
臨時表與持久表
TEMPORARY:表示臨時表,如果不選用則位持久表。
持久表一直存在,多個用戶或應用程式可同時使用持久表,如果只需臨時存放數據可添加 TEMPORARY 關鍵字
臨時表只能對創建它的用戶可見,斷開資料庫連接時,表會自動清除
數據類型
數據類型指系統中所允許的數據的類型。每列都應有適當的數據類型,來限制或允許該列的數據。 建表時必須為每列指定正確的數據類型及數據長度 (CHAR(50))
MySQL 主要數據類型:
- 數值類型:整型 int、浮點 double、布爾 bool
- 日期和時間類型:日期型、時間戳 timestamp、時間型 time
- 字元串類型:定長字元類型char、可變長字元類型varchrar
- 空間數據類型:單個幾何類型 GEOMETRY等
關鍵字 AUTO_INCREMENT
AUTO_INCREMENT: 表中數據類型為整型的列設置自增屬性 (++i),從當前指或 1 開始,表中只能有一個 AUTO_INCREMENT。
當一個表列被指定為 AUTO_INCREMENT 後,其值可被覆蓋,即可在表數據插入語句中為該列指定一個值(必須唯一),則該值將替換系統自動生成的值,後續增量基於該插入的值
指定預設值
DEFAULT:用於指定MySQL在未給值的情況下預設的值(DEFAULT 0)
如果未指定預設值,則自動為其分配一個值,如若該列可取值NULL,則預設NULL,若定義 NOT NULL,則預設取決於該列的類型:
- 一個沒有聲明 AUTO_INCREMENT 列 為數字類型,預設 0
- 一個 AUTO_INCREMENT 列 預設為順序中的下一個值
- 對於除 TIMESTAMP 以外的日期和時間類型,預設為該類型適當的'零'值、
- 對於表中第一個 TIMESTAMP 列,預設值為當前日期和時間
NULL值
NULL:沒有值或缺值,允許NULL的列,插入行時可以不給該列的值;不允許NULL值的列,則該列必須有數據
NULL
和 ''
是不對等的 NOT NULL 列中允許''
不允許 NULL
主鍵
PRIMARY KEY :指定主鍵,主鍵必須唯一且不能為NULL, 如果是單列,值必須唯一,如果是組合列,則其組合的值必須唯一
更新表
通過使用 ALTER TABLE 來修改資料庫
ADD[COLUMN]
:新增表列,可增多列使用逗號分隔即可
Example:
mysql> ALTER TABLE mysqle_test.customers
-> ADD COLUMN cust_city char(10) NOT NULL DEFAULT'ShenZhen' AFTER cust_sex;
Query OK,0 rows affected(0.61 sec)
Records:0 Duplicates:0 Warning:0
AFTER:將新增的列添加到cut_sexl 列之後
FIRST:將新增的列添加到表的第一列
若使用上述關鍵字則將新增的列添加至表最後
類似的 可以使用 ADDPRIMARY KEY 、ADDFOREIGN KEY 、ADD INDEX 添加對應的 主鍵、外鍵、索引
CHANGE[COLUMN]
: 修改表中列的名稱或數據類型,可修改多列使用逗號分隔即可
mysql> ALTER TABLE mysqle_test.customers
-> CHANGE COLUMN cust_sex sex char(1) NULL DEFAULT 'M'
Query OK,0 rows affected(0.66 sec)
Records:0 Duplicates:0 Warning:0
如果將數據類型更換,可能會丟失該列原有的數據,如果視圖改變的數據類型於原有的數據類型不相容,則SQL命令不會執行,且拋出錯誤。
再相容的情況下,該列的數據可能會被截斷,如:一列的數據類型為 varchart(10),改為char(1),則該列中的數據'ShenZhen'會變為'S'
ALTER [COLUMN]
: 修改或刪除指定列的預設值
mysql> ALTER TABLE mysqle_test.customers
-> ALTER COLUMN cust_city SET DEFAULT 'ShangHai'
Query OK,0 rows affected(0.36 sec)
Records:0 Duplicates:0 Warning:0
MODIFY [COLUMN]
: 修改指定列的數據類型,通過 'FIRST' 或 'AFTER' 修改列的位置
mysql> ALTER TABLE mysqle_test.customers
-> MODIFY COLUMN cust_name char(30) FIRST
Query OK,0 rows affected(0.20 sec)
Records:0 Duplicates:0 Warning:0
DROP [COLUMN]
: 刪除列,該列所有數據一併刪除
mysql> ALTER TABLE mysqle_test.customers
-> DROP COLUMN cust_city
Query OK,0 rows affected(0.42 sec)
Records:0 Duplicates:0 Warning:0
同樣 可使用 DROP PRIMARY KEY 、DROP FOREIGN KEY、DROP INDEX 刪除對應的主鍵、外鍵、索引
RENAME[TO]
:表重命名
mysql> ALTER TABLE mysqle_test.customers
-> RENAME TO
Query OK,0 rows affected(0.42 sec)
重命名錶
除了 ALTER TABLE 中的 RENAME TO 修改表名,還可通過 RENAME TABLE 來修改單張和多張表(以逗號分隔)
mysql> RENAME TABLE mysql_test.back.customers TO mysqle_test.customers
刪除表
DROP[TEMPORARY]TABLE[IF EXISTS]
刪除一個已存在的表,可以刪除多張表,前提操作人必須有許可權,但是操作人在該張表上的許可權不會被刪除
查看表
SHOW [FULL] TABLES [{FROM|IN}db_name] [LIKE'pattern'|WHERE expr]
: 顯示指定資料庫中所有表名
Example:
mysql> USE mysql_test
Database changed
mysql> SHOW TABLES:
Tables_in_mysql_test
customers
1 row in set <0.01 sec>
SHOW [FULL] COLUMNS {FROM|IN}tb_name[{FROM|IN}db_name] 或 {DESCRIBE|DESC} tbl_name[col_name|wild]
: 顯示指定資料庫表結構。
MySQL 支持使用 DESCRIBE 代替 SHOW COLUMNS FROM 來查看表結構
Example:
mysql> DESC mysql_test.custormes
Field Type Null key Default Extra
cust_id int<11> NO PRI NULL auto_increment
cust_name char<50> NO Null
cust_sex int<1> NO 0
3 row in set <1.56 sec>