primary key
- primary key:主键约束,被声明为主键列的值是不可以重复的并且不能为NULL
- 一张表只能有一个主键,但是可以是复合主键
create table db(id int PRIMARY KEY,name varchar(32),)
- primary key(xxx,xxx):复合主键,当复合主键的所有值都相同的时候,才不可以重复
create table db(id int,name varchar(32),primary key(id,name))
not null
- not null:非空约束,在插入数据时,必须为该列提供数据
unique
- unique:唯一约束,当定义了唯一约束以后,该列值是不能重复的
- 如果指定了unique但是没有指定not null,则unique字段可以有多个NULL
- 一张表可以有多个unique
- unique+not null无限等价于primary key
foreign key
- foreign key:外键约束
- 用于定义主表和从表之间的关系:外键约束定义在从表上,主表则必须具有主键约束或是unique约束,当定义外键约束以后,要求外键列数据必须在主表的主键列存在或是为NULL,否则会失败
- foreign key (本表字段名)references 主表名(主键名或unique字段名)
- 外键指向的表的字段,要求是primary key或者是unique
- 表的类型是innodb,这样的表才支持外键
- 外键字段的类型要和主键字段的类型一致(长度可以不用),
- 外键字段的值,必须在主键字段中出现过,或者为NULL(前提是外键字段允许为NULL)
- 一旦建立主外键的关系,数据就不能随意删除了
- 如果需要删除主表的某行数据,需要先把从表外键有关这行主表的所有数据删除,才可以删除主表的这行数据
- 如果从表外键的值在主表中没有存在,则可以随意添加删除
create table stu(id int primary key,class_id int,foreign key (class_id) references class(id))
check
- check:用于强制行数据必须满足的条件
- 如sal列定义了check约束,并要求sal列值在10-20之间,如果插入的数据不在这个范围,就会报错
- mysql5.7支持check的语法校验,但是不会生效
- mysql中实现check的功能,一般是在程序控制中,或者通过触发器完成
create table db(sex varchar(6) check (sex in ("man","woman")),sal double check (sal >1000 and sal <2000))
自增长
- 字段名 整型 primary key auto_increment
- 一般来说自增长和primary key配合使用
- 自增长也可以单独使用(但是需要配合一个unique)
- 自增长修饰的字段为整数型的(虽然小数也可以使用,但是使用很少)
- 自增长默认从1开始
- alter table 表名 auto_increment=xxx 来修改自增长的开始值