目录
约束类型
非空约束
唯一约束
默认约束
自增约束
外键约束
主键约束
检查约束
关键字
not null
unique
default
auto_increment
foregin key
primary key
check
1.1、非空约束
定义:用来定义该键不能为空的约束,在后续插入数据中该值不能为空值
create table roo
(
idint not null,
namechar(10) not null);
create table roo
(
idint null,
namechar(10) null);//这里和not null相反,这两个列都可以为空,切记null不等于任何值,包括null本身。
这里我创建了一个名为roo的表,里面有两个列都加上了非空属性的约束,插入数据时,如果为空则会提示错误
1.2、唯一约束
唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现重复的值,但是可以为多个null,同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引;
create table root
(
idintunique,
namechar(10) unique
);
这里的id和name的值都是唯一属性,值时不能相同的。
1.3、默认约束
定义:默认约束的值在插入数据时如果不给数据则默认为默认约束值
create table root
(
idint default 1,
namechar(10) default "wuyu");
这里我设置的默认值为id为1,name的默认值为无语
1.4、自增约束
定义:定义了自增约束,如果不初始化值,则自动从1开始递增
create table mm
(
idint not nullauto_increment,
namechar(10) null,
primary key(id)
);
这里的自增约束auto_increment必须设为主键。
1.5、外键约束
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。保持数据的一致性和整体性是他的目的
注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束。
create table student
(
snoint,
snamechar(10) not null,
sexchar(5) not null,
primary key(sno)
);//这里创建了一个学生表,用来和另一张表进行连接
create table course
(
snoint,
cnoint not null,
score varchar(10) not null,
index(sno), --外键必须加索引
foreign key(sno) references student(sno)
);//课程表中的id是student表的外键
alter table course drop foreign key sno;//删除表中的外键
alter table course
add foreign key(sno) references student(sno);
alter table course
add constraint FK_SNO
foreign key(sno) references student(sno);
//添加新的外键
alter table course
add constraint FK_SNO
foreign key(sno) reference student(sno)
on update cascade
on delete cascade;
//on update cascade 联级更新
//on delete cascade 联级删除
//作用:这里一旦学生所在表的数据有更新或删除的操作,那么课程所在表也会对应的进行更新和删除的操作
//事件触发器限制:cascade(跟随外键改动),restrict(限制表中的外键改动),set null(设空值),no action(默认)
drop table sc;
drop table student;
//这里为了保证数据的完整性约束,必须先删除成绩表sc,才能删除学生表
1.6、主键约束
主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。MySQL的主键名总是PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
create table ant
(
idint not null,
namechar(10) not null,
sexchar(10) default "nan",
score varchar(10),
primary key(id)
);
create table ant
(
idint not null,
namechar(10) not null,
sexchar(10) default "nan",
score varchar(10),
primary key(id,name)
);//你可以使用一列作为主键,也可以使用两列作为主键,称之为符合主键,必须通过两个列的数据才能进行整体定位的表可以使用。
1.7、检查约束
MySQL可以使用check约束,但check约束对数据验证没有任何作用。 也就是说不符合的数据也可以成功被插入
create table student
(
idintprimary key,
namechar(10) not null,
ageint not null,
check(age>20)
);//这里虽然加了check约束要求年龄必须大于20,但实际小于20也可以插入。