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;