一、列類型
1. 數值型
- 整數型:tinyint、smallint、mediumint、int、bigint(顯示寬度和zerofill一起使用,e.g. int_3 tinyint(3) unsigned zerofill)
- 小數型:其中浮點型有兩個float(單精度)和double(雙精度),定點型爲decimal
2. 時間日期類型
- datetime:格式爲YYYY-mm-dd HH:ii:ss,表示範圍1000-9999年
- date:datetime的前半部分
- time:datetime的後半部分,可正可負
- timestamp:格式與datetime一致,從1970年開始,紀錄被更新,該字段自動更新
- year
3. 字符串類型
- char:定長字符串,最大長度255,浪費磁盤空間,效率高
- varchar:變長字符串,理論最大長度65536,節省磁盤空間,效率低
- text:通常超過255個字符就用該數據類型
- blob:存儲二進制數據
- enum:單選
- set:多選
二、列屬性
1. 空屬性
null/not null
2. 列描述
comment
3. 默認值
default
4. 主鍵
primary key,一張表只能有一個主鍵,值不能爲空。
- 增加主鍵
- 複合主鍵,在所有字段之後primary key(字段1, 字段2, ...)
- atler table 表名 add primary key(字段列表);
- alter table 表名 modify [column] 字段名 數據類型 [列屬性] [位置];
- 刪除主鍵
5. 唯一鍵
unique/unique key,一張表可以有多個唯一鍵,值可以爲空。
- 增加唯一鍵
- 複合唯一鍵,在所有字段之後unique key(字段1, 字段2, ...)
- atler table 表名 add unique key(字段列表);
- alter table 表名 modify [column] 字段名 數據類型 [列屬性] [位置];
- 刪除唯一鍵
6. 自增長
auto_increment(不給值、給default、給null,本身必須是索引,必須是整數數據類型,一張表最多只能有一個自動增長屬性),查看自增長變量show variables like 'auto_increment%';,刪除使用modify。
三、數據高級操作
1. 主鍵衝突
insert into 表名[(字段1, 字段2, ...)] values(值1, 值2, ...) on duplicate key update 字段 = 新值;
replace into 表名[(字段1, 字段2, ...)] values(值1, 值2, ...);
2. 複製表結構
create table like 庫名.表名;
3. 蠕蟲複製
insert into 表名[(字段列表)] select 字段列表/* from 表名;
4. 高級查詢
select [select選項] 字段列表[字段別名]/* from 表名 [where子句] [group by子句] [having子句] [order by子句] [limit子句];
- select選項:all、distinct(用來去除所有字段都重複的紀錄)
- where子句:用來過濾行
- group by子句:以便能對每個組進行聚集計算,聚集函數avg()、count()、min()、max()、sum()以及函數group_concat()
- having子句:用來過濾組