主键约束
主键使用需要注意:
- 每个表只能定义一个主键
- 主键值必须唯一标志表中的每一行,且不能为NULL
- 一个字段名只能在联合主键字段表中出现一次
- 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则
// 设置单字段主键
// 1.在创建表时指定
create table `student`(
`id` int primary key
)
create table `student` (
`id` int,
primary key (`id`)
)
// 2.在建表后指定
alter table student add constraint primary key(`id`)
// 在创建表时设置联合主键
// 1.在创建表时指定
create table `student`(
`id` int,
`class` varchar(20),
primary key(`id`, `class`)
)
// 2.在建表后指定
alter table `student` add primary key(`id`,`class`)
//删除主键约束
alter table student drop primary key
auto_increment
- 默认情况下,auto_increment初始值为1,每新增一条记录,字段自动加一
- 一个表中只能由一个字段使用auto_increment约束,且该字段必须由唯一索引
- auto_increment 约束的字段必须具备not null 属性
- auto_increment 约束的字段只能是整数类型
- auto_increment 约束的字段的最大值受该字段的数据类型约束,如果达到上限,就会失效
create table student(
id int primary key auto_increment
)
create table student(
id int primary key auto_increment
)auto_increment=100
外键约束
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。主表删除某条记录时,从表中对应的记录也必须由相应的改变,一个表中可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值,否则插入失败,在删除时,必须先去掉主键对应的外键依赖,才能将指定记录删除。
- 主表必须已经存在于数据库中,或者是当前正在创建的表
- 必须为主表定义主键
- 外键允许出现空值
- 在主表的表名后面指定列名或列名的组合,这个列或列的组合必须是主表的主键或候选键
- 外键中列的数目必须和主表中主键列的数目相同
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同
// 1.在创建表时指定外键
CREATE TABLE `grade` (
`id` int NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
);
create table student(
id int primary key,
gid int,
constraint `P_K` foreign key(`gid`) references grade(`id`)
);
// 2. 在创建表后指定外键
alter table `student` add constraint `F_K` foreign key(`gid`) references `grade`(`id`)
// 3. 删除外键依赖
alter table student drop foreign key `P_K`
// 指定on delete/on update 来控制数据的完整统一
alter table student add constraint `F_K` foreign key(`gid`) references grade(`id`) on delete [cascade|set null|no action|restrict] on update [cascade|set null|no action|restrict];
// restrict时默认操作 拒绝主表删除或修改外键关联列
// cascade表示同步主表的记录
唯一约束
所有记录中字段的值不能重复出现,与主键相比,其可以在一个表中存在多个,且允许有1个空值
// 1.在建表时指定
create table student(
id int unique
);
create table student(
id int,
unique key `U_I`(`id`)
);
// 2.建表后添加
alter table student add constraint `U_I` unique(`id`);
// 3.删除
alter table student drop index `U_I`;
检查约束
用于检查字段值有效性
// 1.建表时指定
create table student(
id int,
check(id>0)
);
create table student(
id int,
constraint `C_k` check(id>0)
);
// 2.建表后指定
alter table student add constraint `C_K` check(id>0);
// 3. 删除
alter table student drop constraint `student_chk_1`;
默认值约束
如果没有为某个字段赋值,系统会自动为这个字段插入默认值,一般用于设置了非空约束的列,能够防止在录入数据时出错
// 创建
create table student(
id int default 0
);
// 创建后修改
alter table student change column id id varchar(30) default 33;
// 删除
alter table student change column id id varchar(30) default NULL;
非空约束
用于指定字段非空,当字段为空时,会报错
// 创建时指定
create table student(
id int not null
);
// 创建后指定
alter table student change column id id int NOT NULL;
// 删除
alter table student change column id id int NULL;
查看表中约束:
show create table student