MySQL初级-15-常见约束和标识列

本文最后更新于:2020年7月27日 中午

mysql Ver 14.14 Distrib 5.5.62

15.1 常见约束

15.1.1 含义

约束是一种限制,用于限制表中的数据,以保证表中数据的准确和可靠。

15.1.2 分类

六大约束:

  1. NOT NULL:非空,用于保证该字段的值不能为空。
  2. DEFAULT:默认,用于保证该字段有默认值。
  3. PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空。
  4. UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。
  5. CHECK:检查约束【MySQL中不支持】。
  6. FOREIGN KEY:外键,用于限制两个表的关系,保证该字段的值必须来自于主表关联列的值。在从表中添加外键约束,用于引用主表中某列的值。

添加约束的时机:

  1. 创建表时。
  2. 修改表时。

约束的添加分类:

  1. 列级约束:语法上六大约束都支持,但外键约束无效。
  2. 表级约束:除了NOT NULL、DEFAULT,其他约束都支持。

15.1.2.1 PRIMARY KEY和UNIQUE比较

  1. 两者都能保证唯一性。
  2. PRIMARY KEY不能为空,而UNIQUE可以为空。
  3. 一个表中只能有一个PRIMARY KEY,而可以有多个UNIQUE。
  4. 两者都可以实现多列组合。

15.1.2.2 FOREIGN KEY的特点

  1. 要求在从表中设置FOREIGN KEY关系。
  2. 从表的FOREIGN KEY的类型和主表的关联列的类型要求必须一致或兼容,名称无要求。
  3. 主表的关联列必须是一个KEY(一般是PRIMARY KEY或UNIQUE)。
  4. 插入数据是,先插入主表,再插入从表。

15.1.3 在创建表时添加约束

15.1.3.1 添加列级约束

CREATE TABLE 表名(
	字段名 字段类型 列级约束,
	字段名 字段类型
);

直接在字段名和类型后面追加约束类型即可,只支持:DEFAULT、NOT NULL、PRIMARY KEY、UNIQUE。

15.1.3.2 添加表级约束

CREATE TABLE [IF NOT EXISTS] 表名(
	字段名 字段类型,
	字段名 字段类型
    [CONSTRAINT 约束名] 约束类型(字段名)
);

在各个字段的最下面追加要设置的字段的约束类型。

15.1.3.3 查看表中的所有索引

SHOW INDEX FROM 表名;

15.1.4 修改表时添加约束

15.1.4.1 添加列级约束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 新约束;

15.1.4.2 添加表级约束

ALTER TABLE 表名 ADD [CONSTRAINT 约束名] 约束类型(字段名)

添加FOREIGN KEY约束语法:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(字段名) 
REFERENCES 主表名(字段名);

15.1.5 修改表时删除约束

  1. 删除NOT NULL约束。

    ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 NULL;
  1. 删除DEFAULT约束。

    ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型;
  1. 删除PRIMARY KEY约束。

    ALTER TABLE 表名 DROP PRIMARY KEY;
  1. 删除UNIQUE约束。

    ALTER TABLE 表名 DROP INDEX 字段名;
  1. 删除FOREIGN KEY约束。

    ALTER TABLE 表名 DROP FOREIGN KEY 约束名;

15.1.6 级联删除

在创建FOOREIGN KEY约束时添加关键字 ON DELETE CASCADE。

ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(字段名) 
REFERENCES 主表名(字段名) ON DELETE CASCADE;

15.1.7 级联置空

在创建FOOREIGN KEY约束时添加关键字 ON DELETE SET NULL。

ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(字段名) 
REFERENCES 主表名(字段名) ON DELETE SET NULL;

15.2 标识列

15.2.1 含义

AUTO_INCREMENT又称为自增长列,可以不用手动的插入值,系统提供默认的序列值。

15.2.2 特点

  1. 设置标识列的字段必须是一个KEY。
  2. 一个表中只能有一个标识列。
  3. 表示列的值只能是数值型。
  4. 标识列可以通过SET auto_increment_increment=3;设置步长,还可以通过手动插入值来设置起始值。

15.2.3 语法

CREATE TABLE 表名(
	字段名 字段类型 列级约束 AUTO_INCREMENT,
	字段名 字段类型,
    表级约束
);

版权声明:自由转载-非商用-非衍生-保持署名 Creative Commons BY-NC-ND 3.0 协议,转载请注明出处!

 目录