一、列类型
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子句:用来过滤组