## 數據表操作
### 創建數據表
只要用到數據庫,我們就會用到創建數據庫表,介紹兩種創建表的方法。
#### CREATE 語句
使用 CREATE 語句創建表,語法如下:
CREATE TABLE tbl_name [IF NOT EXISTS] (create_definition,...) [type =table_type]
create_definition:col_name type [not null | null][default default_value] [auto_increment][primary_key]
CREATE 創建數據表示例:
CREATE TABLE IF NOT EXISTS test (
id int(11) unsigned NOT NULL,
username varchar(15) NOT NULL,
password char(32) NOT NULL,
content text NOT NULL,
createtime datetime NOT NULL,
gender tinyint(1) NOT NULL, DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
顯示位寬:
對于整數類型,MySQL 支持指定顯示寬度,例如 int(5) 表示當數值寬度小于 5 時在數字的前面填滿寬度,可以配合 ZEROFILL 使用。
**注意:** 使用一個指定寬度并不會影響字段的大小和它可以存儲的值的范圍。
UNSIGNED(無符號)
主要用于整型和浮點類型,例如 tinyint 整型的取值區間為 -128 ~ 127,使用無符號后取值區間為 0 - 255。
AUTO_INCREMENT(自動增長)
整數類型特有的屬性,用于產生唯一標識符或順序值。
**注意:** 一個表中只能有一個自動增長列,自動增長列應該定義為 NOT NULL, 并定義為 PRIMARY KEY 或 UNIQUE
ZEROFILL(零填充)
在位數不夠的數值前面用字符 “0” 填充剩余寬度。
DEFAULT
DEFAULT 屬性確保在沒有任何值可用的情況下,賦予某個常量值,這個值必須是常量,因為 MySQL 不允許插入函數或表達式值。此外,此屬性無法用于 BLOB 或 TEXT 列。
NOT NULL
如果將一個列定義為 NOT NULL,將不允許向該列插入 NULL 值。建議在重要情況下始終使用 NOT NULL 屬性,因為它提供了一個基本驗證,確保已經向查詢傳遞了所有必要的值。
NULL
為列指定 NULL 屬性時,該列可以保持為空,而不論行中其它列是否已經被填充。NULL 精確的說法是 “無”,而不是空字符串或 0
#### CREATE ... SELECT 語句
使用 CREATE ... SELECT 語句創建表,語法如下:
CREATE TABLE tb_new_name SELECT * FROM tb_old_name;
上述語句表示,從后者的表中復制一份,添加到新的數據表中,前面是新的數據表,之前是不存在的。例如:
CREATE TABLE test001_201712 SELECT * FROM test001;
### 顯示數據表信息
有時候我們需要查看某個數據表的相關信息,比如結構,列名等等;那么我們就需要用到 show/describe 語句來查看,看下面語法:
show tables [from db_name] [like wild]
show columns from tbl_name [from db_name] [like wild]
show index from tbl_name [from db_name]
show table status [from db_name] [like wild]
{describe| desc} tbl_name {col_name | wild}
第一種語法表示:查看某個數據庫下的所有數據庫表,或者根據 like 模糊查看某個數據庫表;例如
show tables from test001;
show tables from test001 like "%a%";
第二種語法表示:查看某個數據庫表中的列屬性, like 后面跟的是列的名稱的某個關鍵字;例如
show columns from test001;
show columns from test001 from test001 like "%n%";
第三種語法表示:查看某個數據庫表中的索引;例如
show index from test001 from test001;
第四種語法表示:查看數據庫中全部表或者某個表的狀態信息,信息提供的更多;例如
show table status from test001;
show table status from test001 like "%t%";
第五種語法表示:查看數據庫表的信息,是 show 的另外一種方式;例如
desc test001;
describe test001 "%n%";
### 修改表結構
有時你可能需要改變一下現有表的結構,那么 ALTER TABLE 語句將是你的合適選擇。
增加列:
ALTER TABLE test001 ADD weight int;
修改列:
ALTER TABLE test001 MODIFY weight varchar(50);
刪除列:
ALTER TABLE test001 DROP weight;
另外一種常用方式,例如:
給列更名:
ALTER TABLE test001 CHANGE weight wei int;
給表更名:
ALTER TABLE test001 RENAME test001_01;
### 刪除數據表
DROP TABLE 刪除一個或多個數據庫表。表中的所有數據和表定義均被刪除,故小心使用這個命令。語法如下:
DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]
例如刪除 test001_01 這個表,要刪除多個表,在后面用逗號隔開即可。例如:
DROP TABLE IF EXISTS test001_01;