6.1 数据类型
6.1.1 数值型
整型 | 类型 | 字节 | | —- | —- | | tinyint | 1 | | smallint | 2 | | mediumint | 3 | | int、integer | 4 | | bigint | 8 |
- 整型类型的默认为有符号,使用
unsigned进行无符号约束 - 插入值超出整型范围时,报出 out of range 异常,并插入整型范围的临界值
- 长度表示显示的最大宽度,每种类型均有默认值,若数值长度小于字段要求长度,则使用 0 填充,需搭配
zerofill使用
- 整型类型的默认为有符号,使用
定点型 | 类型 | 字节 | | —- | —- | | dec(M, D)、decimal(M, D) | M+2 |
M:整数部分与小数部分的位数和,默认为 10D:小数点后保留两位,四舍五入,默认为 0- 整数部分长度为 M-D,超出则插入临界值
- 浮点型 | 类型 | 字节 | | —- | —- | | float(M, D) | 4 | | double(M, D) | 8 |
6.1.2 字符型
较短 | 类型 | 最大字符 | | —- | —- | | char(M) | M | | varchar(M) | M | | binary/varbinary | | | enum | | | set | |
M:插入字符长度char表示固定长度的字符,(M) 可省略,默认值为1varchar表示可变长度的字符,(M) 不可省略,无默认值binary与varbinary保存较短的二进制字符enum只能插入枚举中的一个,不区分大小写set可以插入集合中的多个,不区分大小写
- 较长 | 类型 | 字节 | | —- | —- | | text | | | blob | |
6.1.3 日期型
| 类型 | 字节 | 最小值 | 最大值 |
|---|---|---|---|
| date | 4 | 1000-01-01 | 9999-12-31 |
| datetime | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
| timestamp | 4 | 19700101080001 | |
| time | 3 | -838:59:59 | 838:59:59 |
| year | 1 | 1901 | 2155 |
datetime不受 MySQL 设置时区的影响timestamp受 MySQL 设置时区的影响
6.2 约束
6.2.1 种类
- 六大约束
- 非空约束:not null
- 默认约束:default
- 主键约束:primary key
- 唯一约束:unique
- 外键约束:foreign key
- 与 key(primary key 或 unique)搭配
- 检查约束:check,【MySQL 不支持】
- 列级约束:六大约束均支持,但外键约束无效果
- 表级约束:除非空约束和默认约束外
- 标识列:auto_increment
1.2 表级约束
create table 表名( 列名1 列类型1, 列名2 列类型2, … 【constraint 约束名】 表级约束(列名) );
2 修改表时添加约束
2.1 列级约束
alter table 表名 modify column 列名 列类型 列级约束;
2.2 表级约束
alter table 表名 add 【constraint 约束名】 表级约束(列名);
3 修改表时删除约束
<a name="pStwX"></a>### 6.2.3 使用```sql# 1 【创建表时添加约束】# 1.1 【列级约束】create table stuinfo(id int primary key,stuname varchar(20) not null,gender char(1) check(gender='男' or gender='女'),seat int unique,age int default 18,majorid int references major(id));# 1.2 【表级约束】create table stuinfo(id int,stuname varchar(20),gender char(1),seat int,age int,majorid int,constraint pk primary key(id),constraint uq unique(seat),constraint ck check(gender='男' or gender='女'),constraint fk_stuinfo_major foreign key(majorid) references major(id));# 1.3 【通用】create table stuinfo(id int primary key,stuname varchar(20) not null,gender char(1),seat int unique,age int default 18,majorid int,constraint fk_stuinfo_major foreign key(majorid) references major(id));# 【查看索引】show index from stuinfo# 2 【修改表时添加约束】# 2.1 【列级约束】alter table stuinfo modify column stuname varchar(20) not null;alter table stuinfo modify column age int default 18;alter table stuinfo modify column id int primary key;alter table stuinfo modify column seet int unique;alter table stuinfo modify column id int primary key auto_increment;# 2.2 【表级约束】alter table stuinfo add primary key(id);alter table stuinfo add unique(seat);alter table stuinfo add foreign key(majorid) reference major(id);# 3 【修改表时删除约束】# 3.1 【删除非空约束】alter table stuinfo modify column stuname varchar(20) null;# 3.2 【删除默认约束】alter table stuinfo modify column age int;# 3.3 【删除主键约束】alter table stuinfo drop primary key;# 3.4 【删除唯一约束】alter table stuinfo drop index seat;# 3.5 【删除外键约束】alter table stuinfo drop foreign key fk_stuinfo_major;# 3.5 【删除标识列】alter table stuinfo modify column id int;
