MySQL-约束 约束分类 1.非空约束 2.主键约束PRIMARY KEY 3.唯一约束UNIQUE KEY 4.默认约束DEFAULT 5.外键约束 FOREIGN KEY 6.约束与索引区别

表级约束:针对两个或两个以上字段。只能在列定义后说明,且平时用很少。NOT NULL,DEFAULT无表级约束。
列级约束:只针对一个字段。可以在列定义时说明,也可以在列定义后说明。
NOT NULL 非空约束
PRIMARY KEY 主键约束
UNIQUE KEY 唯一约束
DEFAULT 默认约束
FOREIGN KEY 外键约束

1.非空约束

.NULL,字段值可以为空;
.NOT NULL,字段值禁止为空。
用于指定字段是否可以为空,语法:
CREATE TABLE tbl_name (
column_name data_type NULL/NOT NULL,
...
}
说明:默认是NULL,可以为空。

2.主键约束PRIMARY KEY

.每张数据表只能存在一个主键;
.主键保证记录的唯一性;
.主键自动为NOT NULL
.AUTO_INCREMENT必须与主键一起使用,但主键没有要求一定要AUTO_INCREMENT;且AUTO_INCREMENT,即使INSERT失败,id也会自动增加。
语法:
CREATE TABLE tbl_name(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,----注意:只能是int型或float型,小数位数为0;且不需要给id赋值。
...
);
说明:创建完主键约束,会自动创建索引!

3.唯一约束UNIQUE KEY

.可以保证记录的唯一性
.唯一约束的字段可以为NULL(与主键区别)
.每张数据表可以存在多个唯一约束(与主键区别)
延伸理解:唯一约束字段可以多个为NULL,如何保证记录的唯一性?实际在存储时只有一个为空,所以仍能保证记录唯一性。
语法:
CREATE TABLE tbl_name(
column_name data_type UNIQUE KEY,
...
);

4.默认约束DEFAULT

即当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
语法:
CREATE TABLE tbl_name(
column_name data_type DEFAULT val,----注意DEFAULT可以与ENUM类型值进行结合使用,DEAFULT可以指定其中的值。
...
);

5.外键约束 FOREIGN KEY

作用:保持数据一致性,完整性。实现一对一或一对多关心。
注意:存储引擎必须是InnoDB!!
MySQL-约束
约束分类
1.非空约束
2.主键约束PRIMARY KEY
3.唯一约束UNIQUE KEY
4.默认约束DEFAULT
5.外键约束 FOREIGN KEY
6.约束与索引区别
实际经验:实际DB开发中很少使用物理外键约束,而是使用逻辑外键约束(通过在定义表的时候,通过存在语法上的逻辑关联而产生的外键,需要有连接关键词inner join 或者left join 等等和连接部分,也就是on后面的部分,如果需要对应的设置,也可以加上set等语句)

6.约束与索引区别

约束:为了保证数据完整性为目的;
索引:快速定位特定数据,提高查询效率,确保数据唯一性。