基本介绍:
约束用于确保 数据库的数据满足特定的商业规则.
根据约束起的作用,约束可分为:
-
NOT NULL 非空约束,规定某个字段不能为空
#如果在列上定义了NOT NULL,那么当插入数据时,必须为列提供数据. 字段名 字段类型 NOT NULL;
-
UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
#当定义了唯一约束后,列值是不能重复的. 字段名 字段类型 UNIQUE;
-
PRIMARY KEY 主键(非空且唯一)约束
#用于唯一的表示表行的数据,当定义主键约束后,该列不能重复.非空且唯一 列名 列名类型 PRIMARY KEY; #复合主键把多个字段看做一个整体 #复合主键,复合主键表示要多个字段的内容要完全一致才被看做重复。 #下面表示2个字段数据不能一模一样 CREATE TABLE 表名( 列名1, 列名2, 列名3, PRIMARY KEY(列名1,列名2) );
-
FOREIGN KEY 外键约束
-
存储引擎必须是innodb的表才支持外键
-
外键的字段类型必须和主键字段的类型一致.
-
外键字段的值可以添加空值,前提是外键字段允许为null
-
一单建立外键关系,数据不能随意删除了
#用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是UNIQUE约束, #要求外键列数据必须在主表的主键列存在或是为null #主表中被外键的列有数据从表中才能添加数据 CREATE TABLE 表名( -- 创建表时添加外键 列名1, 列名2, 列名3, [CONSTRAINT][外键名称] FOREIGN KEY(本表字段)REFERENCES主表名(主键名或 UNIQUE 字段名) ); --创建完表后添加外键 ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
-
CHECK 检查约束
-
用于创建数据时约束数据添加的范围和条件.
-
但是mysql 5.7版本目前还不支持CHECK约束,只做语法校验,单不会生效
-
在MySQL 8.0.16版本之后支持CHECK约束
#只做语法校验,单不会生效 CREATE TABLE 表名( 列名 INT CHECK (列名 > 1000 AND 列名 <6000 ) );
ENUM枚举约束:在MySQL中, ENUM 是一个字符串对象,其值是从列创建时定义的允许值列表中选择的。
#指定只能选择男或女 CREATE TABLE 表名( 列名1 ENUM ('男','女'); );
DEFAULT 默认值约束
#创建列时添加默认值,如果添加数据时没有给数据值,会使用默认值。 CREATE TABLE 表名( 列名1 数据库类型 DEFAULT '' );
AUTO_INCREMENT 自增长
自增长细节:
1:一般来说自增长是和primary key 配合使用的
2:自增长也可以单独使用但是需要配合一个unique
3:自增长修饰的字段为整数型的,虽然小数也可以但是非常非常少这样使用
4: 自增长默认从1开始,你也可以通过如下命令修改
alter table 表名 auto_increment = 新的开始值;
5:如果你添加数据时,给自增长字段指定的有值,则以指定的值为准.
#该列从1开始,自动的增长。 CREATE TABLE 表名( 列名1 INT PRIMARY KEY AUTO_INCREMENT; -- 主键且自增长 ); #修改一个表自增长默认的开始值 ALTER TABLE 表名 AUTO_INCREMENT = 100;