约束【非常重要*****】
1、什么是约束
约束对应的英语单词是:constraint
在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!
约束的作用就是为了保证:表中的数据有效!!
2、约束包括哪些?
非空约束:not null
唯一性约束:unique
主键约束:primary key(简称PK)
外键约束:foreign key (简称FK)
检查约束:check (MySQL不支持,oracle支持)
3、非空约束:not null
非空约束的字段插入数据时不能为NULL,否则报错!
not null只有列级约束
语法格式:直接在字段后边加
如:create table table_name(
id,int,
name varchar(32) not null
);
4、唯一性约束:unique
唯一性约束unique约束的字段不能重复,但是可以为NULL!
5、两个字段联合唯一
语法格式:
create table table_name(
id int,
name varchar(255),
email varchar(255),
unique(name,email) // 表示name加上email具有唯一性,这种约束被称为表级约束,多个字段需要联合添加某一个约束时,使用表级约束。约束直接添加到列后面的,叫做列级约束。
);
unique和not null 联合使用
create table table_name(
id int,
name varchar(32) not null unique
);
注意:在MySQL当中,如果一个字段同事呗not null和unique约束的话,该字段自动变成主键(oracle中不一样!)
6、主键约束(primary key,简称PK)–> 非常重要
主键约束的相关术语:
主键约束:就是一种约束
主键字段:该字段上添加了主键约束,这样的字段,叫做主键字段
主键值:主键字段中的每一个值都叫做:主键值!
什么是主键?有什么用?
主键值是每一行记录的唯一标识
主键值是每一行记录的身份证号!!!
任何一张表都应该有主键,没有主键,表无效!!
主键特征:not null + unique(主键值不能是null,同时也不能重复!)
语法格式:
一个字段做主键,叫做单一主键
create table tavbe_name(
id int primary key,
name varchar(32)
);
或者用表级约束添加主键
create table table_name(
id int,
name varchar(32),
primary key(id)
);
多个字段联合起来做主键:复合主键!!
create table table_name(
id int,
name varchar(32),
email varchar(255),
primary key(id,name)
);
但是在实际开发中不建议使用复合主键,建议使用单一主键!
因为主键存在的意义就是这行记录的身份证号,主要意义达到即可,单一主键可以做到。复合主键比较复杂,不建议使用!!
一张表,主键约束只能添加一个(但可以是复合主键)
主键值建议使用的数据类型:
int
bigint
char
等类型
不建议使用:varchar来做主键,因为主键一般都是数字,一般都是定长的!
主键除了单一主键和复合主键之外,还分为:
自然主键:主键值是一个自然数,和业务没关系。
业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值,这就是业务主键!
在实际开发中自然主键使用比较多,因为主键只要做到不重复就行,不需要有意义。
业务主键不好,因为主键一旦和业务挂钩,那么当业务发生变动的时候,可能会影响到主键值,所以业务主键不建议使用,尽量使用自然主键。
auto_increment:自然增长(从1开始,以1递增)
在MySQL当中,有一种机制,可以帮助我们自动维护一个主键值
语法格式:
create table table_name(
id int primary key auto_increment,
name varchar(32)
);
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
insert into table_name(name) values('zhangsan');
7、外键约束(foreign key,简称FK)–> 非常重要
外键约束的相关术语:
外键约束:就是一种约束
外键字段:该字段上添加了外键约束,这样的字段,叫做主键字段
外键值:外键字段中的每一个值都叫做:外键值!
当两张表需要关联,但没有任何约束的时候,可能会导致数据无效,所以为了保证字段中的值有效,需要给字段添加外键约束。
语法格式:
create table t_class(
classnum int primary key,
classname varchar(255)
);
create table t_student(
id int primary key auto_increment,
name varchar(32),
cnum int,
foreign key(cnum) referencecs t_class(classnum)
// t_student表的cnum字段外键引用t_class表的classnum字段
);
注意:
被外键约束的表是子表,另一个是父表
删除表的顺序:
先删子,再删父。
创建表的顺序:
先创建父,再创建子。
删除数据的顺序:
先删子,再删父。
插入数据的顺序:
先插入父,再插入子。
思考:
子表中的外键引用父表中的某个字段,被引用的这个字段必须是主键吗?
答:不一定是主键,但至少要具有唯一性(unique约束)。
外键可以为NULL吗?
答:外键值可以为NULL。