# 1. 约束的理解
约束可以理解为是一种机制,一种为了维护数据完整性和正确性的机制
五大约束:
主键约束:(Primary Key Coustraint),非空/唯一
唯一约束:(Unique Coustraint),唯一/可以为空
默认约束:(Default Coustraint),数据默认值
外键约束:(Froeign Key Coustraint),从表应用主表
检查约束:(Check Coustraint),对列数据的范围和格式的限制,MySql中支持语法,没有实际效果
# 2. 主键 primary key 约束
基本用法:
/* 在列声明中,声明主键字段 */
column_name 字段类型 primary key;
主键约束具有唯一性和不重复性,一般每个table中都有一个主键用来保证数据的唯一性,多为整数类型列
例如:
create table test(id int primary key,name varchar(6))charset=utf8;
注意细节:
1> primary key 具有唯一性和非空特点,即插入数据时不能重复和空值;
2> 每个table 最多只能有一个主键,可以是复合主键,
如: (即 也是两种主键定义格式)
单一主键:create table tb_name(id int primary key,name varchar(6) default '');
复合主键:create table tb_name (id int ,name varchar(6) default '' ,primary key(id,name));
3> 使用desc table_name 和 create table tb_name 查看主键定义情况;
# 3. unique约束
基本用法:
/* 在列声明中,声明唯一约束unique */
column_name 字段类型 unique;
unique约束具有唯一性,定义了该字段数据的唯一非重复
注意细节:
1> 在字段没有指定 not null 非空的约束下,unique 可以为空,null不等同于数据,即可以有多个null存在;
2> 在字段指定not null 非空的约束下,unique 不能为空,且不能有重复,效果等同与主键约束;
3> 同一个table 中可以存在多个 unique 约束的column;
# 4. 外键 foreign key 约束
基本用法:外键约束主要用来定义 主表和从表之间的关系,在从表中定义外键,外键要与主表中的主键声明列或者unique声明列关联,外键列数据必须在主表的主键列存在或者为null值
/* 在从表的列声明中,声明外键与主表的列对应关联 */
foreign keycolumn_name(本表) referencestable_name(column_name)(主表);
例如:外键关联
例如:
创建主表: create table san_class(class_id int primary key ,name varchar(8) default '');
创建从表: create table san_stu(id int primary key ,name varchar(6),class int ,foreign key class references san_class(class_id) );
注意细节:
1> 从表中定义的外键要指向主表中的主键约束或unique约束的列,否则主从表无法关联;
2> 表的类型是innodb才支持外键;
3> 外键所在字段类型要与主键字段的类型一致(长度可以不同);
4> 外键的值要在主键中出现,或者为null;
# 5. 检查 check 约束
基本用法:用来强制行数据必须满足的条件,例如在整数列定义了 check 约束,要求数据值在1-100之间,超出范围 报错
/* 在列声明中强制定义条件 */
column_name 字段类型 check (check条件);
例如:
stu_num int check (20-100)