非外键约束
表的完整性约束: 约束条件 约束描述
primary key 主键约束,约束字段值可以唯一地标识对应的记录
not null 非空约束,约束字段的值不能为空
unique 唯一约束,约束字段的值是唯一的
check 检查约束,限制某个字段的取值范围(MySQL8中提供支持的)
default 默认值约束,约束字段的默认值
auto_increment 自动增加约束,约束字段的值自动递增
foreign key 外键约束,约束表与表之间的关系
注意:红色的是非外键约束,粉色的是外键约束
主键 = 不能为空 + 唯一 作用:可以通过主键查到唯一的一条记录
如果主键没有设定值,或者用null,default都可以完成主键的自增效果
例如:
约束:建立一张用来存储学生的信息表,字段包含学号,姓名,性别,年龄,入学如期,班级,email等信息
(1)学号是主键(2)如果主键是整数类型,那么需要自增(3)学号不能为空(4)email唯一
(5)性别默认值是男 (6)性别只能是男女 (7)年龄只能在18-50之间
代码:
create table t1_student(
sno int(6) primary key auto_increment, (学号是主键)(主键是整数类型,自增)
sname varchar(5) not null, (学号不能为空)
sex char(1) default '男' check(sex='男'||sex='女'), (性别默认值是男)(性别只能是男女)
age int(3) check(age>=18 and age<=50), (年龄只能在18-50)
enterdate date,
classname varchar(10),
email varchar(15) unique (email唯一)
);
添加数据:
insert into t1_student values (1,'小明','男',21,'2012-12-1','Java01班','xm@123.com');
insert into t1_student values (null,'小红','女',22,'2015-12-1','Java09班','xh@123.com');
查看数据:
select *from t1_student;
运行结果:
注意:如果主键没有设定值,可以用null,default,完成主键自增效果。
约束分为二类:(1)表级约束:可以约束表中任意一个或多个字段。
与列定义相互独立,不包含在列定义中;与定义用','分隔;必须指出要约束的列的名称。
(2)列级约束:包含在列定义中,直接跟在该列的其它定义之后,用空格分隔;不必指定列明。
上述例子介绍的就是列级约束
现在来说表级约束:
代码:
create table t2_student(
sno int(6) auto_increment,
sname varchar(5) not null,
sex char(1) default '男' ,
age int(3),
enterdate date,
classname varchar(10),
email varchar(15),
constraint pk_stu primary key(sno), -- pk_stu 主键约束的名字
constraint ck_stu_sex check (sex = '男' ||sex = '女'),
constraint ck_stu_age check (age >=18 and age<=50),
constraint uq_stu_email unique (email)
);
添加数据:
insert into t2_student values (11,'小明','男',21,'2012-12-1','Java11班','xm@123.45com');
insert into t2_student values (null,'小红','女',22,'2015-12-1','Java09班','xh@1234.com');
查看数据:
select *from t2_student;
运行结果:
注意:有些约束能在表级约束中创建,但是也有些约束只能在列级约束中创建。
在创建表以后也能添加约束:
代码:
create table t3_student(
sno int(6) ,
sname varchar(5) not null,
sex char(1) default '男' ,
age int(3),
enterdate date,
classname varchar(10),
email varchar(15)
);
alter table t_student add constraint pk_stu primary key(sno); -- 主键条件
alter table t_student modify sno int(6) auto_increment; -- 修改自增条件
alter table t_student add constraint ck_stu_sex check (sex = '男' ||sex = '女');
alter table t_student add constraint ck_stu_age check (age >=18 and age<=50);
alter table t_student add constraint uq_stu_email unique (email);
添加数据:
insert into t3_student values (111,'小阳','男',21,'2012-12-1','Java11班','xy@123.45com');
insert into t3_student values (112,'小刚','女',22,'2015-12-1','Java09班','xg@1234.com');
查看数据:
select *from t3_student;
运行结果:
可以通过查看表结构来查看自己添加的约束:
desc t1_student;
运行结果:
还可以通过右键设计表查看:
总结:约束可以在表级添加,也可以在列级添加,还可以在创建完表后添加。