主键约束
用于唯一标识表行的数据,当定义主键后,该列不能重复
-- 创建主键方法一
create table T2(
id int(11) primary key,
name varchar(19));
-- 创建主键方法二
create table T3(
id int(11),
name varchar(19),
primary key(id));
-- 创建复合主键
create table T4(
id int(11),
name varchar(19),
primary key(id,name));
主键使用的细节
1、primary key 不能重复而且不能为null
2、一张表最多只能右一个主键,但可以是复合主键
3、主键的指定方式右两种
4、使用desc 表名,可以看到primary key的情况
非空not null
如果定义了not null,那么当插入数据时,必须为列提供数据
create table T5(
id int(11) not null,
name varchar(19) not null);
unique(唯一)
当定义了唯一约束后,该列的值是不能重复的,但是可以为null
create table T6(
id int(11) unique,
name varchar(19) unique not null);
外键
foreign key(外键)用于定义主表和从表之间的关系,外键约束要定义再从表上,主表则必须有主键约束或者unique约束,当定义外键约束后,要求外键数据必须在主表的主键类存在或是为null
语法:
foreign key(本表字段名) references 主表名(主键名或unique字段名)
-- 创建主表
create table T1(
id int(3) primary key,
class_name varchar(19));
--创建从表
create table T2(
id int(3),
name varchar(10),
class_id int(3),
foreign key(class_id) references T1(id));
注意细节:
1、外键指向的表的字段,要求是primary key或者是unique
2、表的类型是innodb,这样才支持外键
3、外键字段的类型和主键字段的类型一致(长度可以不同)
4、外键字段的值,必须在主键字段中出现过,或者为null(前提是外键字段允许为null)
5、一旦建立主外键的关系,数据就不能随意删除了
check
用于强制行数据必须满足的条件,不许是约束的值或者在约束范围内
注意:oracle和sql server均支持check,但是mysql5.7目前还不支持check,只做语法校验,但不会生效
create table T3(
id int primary key,
name varchar(19),
sex varchar(6) check ( sex in ('man','woman')),
sal double check ( sal > 2000 and sal < 2500));
desc T3;