MySQL 约束
数据库表的约束
概述
对表中的数据进行限制,保证数据库的正确性,有效性和完成性。如果一个表添加了约束,不正确的数据将无法添加到表中。一般会在创建表的时候添加约束。
(约束会加在字段后面,对某一列的数据进行限制)
非空约束
非空:不能为空。 not null
唯一约束
唯一:数据唯一,不能重复。 unique
主键约束
表的每一行都应该具有可以唯一标识自己的一列(或一组列);而这个承担标识作用的列称为主键
非空+唯一(一个表中只能有一个主键) primary key
主键列的值不建议修改
主键可以在建表时声明;
auto_increment
(自增,一般会和主键一起使用)
外键约束
- 用于关联父表
- 表中非主键的字段指向另一个表的主键,这个字段叫做外键;一个表中可以有多个外键
外键的作用
- 外键所在的表为子表;指向的主键所在的表为父表;
- 对子表的作用:进行操作时,外键字段在父表中找不到对应的匹配,操作会失败
- 对父表的作用:进行修改删除时,对应的主键在子表中被引用,操作会失败
约束模式
- district 严格模式(默认) 父表不能删除修改子表引用的数据
- cascade 级联模式() 父表操作后,子表关联的数据一起操作
- set null 置空模式 外键值允许为null,父表操作后,子表对应的外键字段被置空
使用外键的条件
- 表存储引擎必须是InnoDB,否则创建的外键无约束效果
- 外键的类型必须和父表的主键类型一致
- 外键的名字不能重复
- 已存在数据的列设为外键时,必须和父表的主键数据对应
复合键(组合键)
- 将多个列作为一个索引键,一般用于复合索引
索引
使用索引可快速访问数据表中的特定信息,索引是对数据表中一列或多列的值进行排序的一种结构
创建索引
CREATE INDEX 索引名称 ON 表名 (字段名)
修改表结构(添加索引)
ALTER table 表名 ADD INDEX 索引名(字段名)
创建表的时候直接指定
CREATE TABLE 表名(ID INT NOT NULL,username VARCHAR(16) NOT NULL,INDEX 索引名 (字段名(长度)));
删除索引的语法
DROP INDEX 索引名 ON 表名;
唯一索引
unique
索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
CREATE UNIQUE INDEX 索引名 ON 表名(字段名(长度))
修改表结构
参照完整性
参照完整性要求关系中不允许引用不存在的实体,与实体完整性是关系型数据模型必须满足的完整性约束条件;目的是保证数据的唯一性