约束
约束就是对字段进行限制,从而保证数据的准确、有效和完整。
多个约束间直接空格分隔开
# 创建student表并为每个字段设置约束
create table student(
id int primary key auto_increment,
name varchar(10) not null unique,
age tinyint unsigned check ( age > 0 and age <=120),
gender char(1) default '男'
);
# 插入时,如果不插入id字段,则自动从1开始递增。如果不插入性别字段,则默认为‘男’
insert into student(name, age) values ('penrose',18);
#此处插入的数据“年龄”列不符合约束条件,则此次操作不会占用序列
insert into student(name, age, gender) values ('cxf',120,'女');
#此处插入的数据与上一条插入的数据重复,则插入数据失败,且会占用一个序列
insert into student(name, age) values ('penrose',18);
注:
- 只能为一个字段设置自增长,多搭配主键使用。
- 为字段设置自增长约束时,不必为其插入数据。如果插入序列后,则下一条数据就会依次往后增加。
- 如果数据插入失败后,再次插入新数据,则序列就会出现断层。这里的插入失败意思是所有插入的数据都符合字段的约束条件,但是表中已有此记录,则此次的序列就会被占用。但是如果插入的数据出现data truncation(数据截断),则不会占用序列。
外键约束
外键能将两张表之间的数据建立连接,从而保证数据的一致性和完整性。
外键存在时,至少存在两张表。
被关联的表是父表(外键所关联的表),需要关联的表是子表
一旦被关联,主表中的数据默认不可删除
外键的删除/更新行为
注:如果想要删除主表中的数据,就需要设置删除/更新行为
#新建表时添加外键约束
create table emp(
id int auto_increment comment 'ID' primary key,
name varchar(50) not null comment '姓名',
age int comment '年龄',
job varchar(20) comment '职位',
salary int comment '薪资&