第四章 约束

4.1 概念

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据;
  2. 目的:保证数据库中数据的正确、有效性和完整性;

4.2 主键约束

  • 关键词:PRIMARY KEY

  • 描述:主键是一行数据的唯一标识,保证一列或多列中的值唯一、非空且永不改动。

  • 条件:

    1. 主键列的任意两行都不相同;
    2. 主键列的每一行都有值,不允许NULL值;
    3. 主键列的值从不修改或更新;
    4. 主键值不重复使用,删除某一行也不能把主键分配给新行。
  • 添加:

    # 方法一
    CREATE TABLE 表名(
        字段1 类型 PRIMARY KEY,
        字段2 类型,
        ……
        PRIMARY KEY(字段1, 字段2...)
    );
    
    # 方法二
    ALTER TABLE 表名 ADD PRIMARY KEY(字段1, 字段2...);
    
  • 删除:

    ALTER TABLE 表名 DROP PRIMARY KEY;
    

4.3 自增长约束

  • 关键词:AUTO_INCREMENT

  • 描述:每增长一条记录,自增长列会自动以相同的步长进行增长。

  • 条件:

    1. 默认情况下,AUTO_INEREMENT的初始值是1,每新增一条记录,字段值自动加1;
    2. 一个表只能有一个字段使用AUTO_INEREMENT约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分或有唯一约束);
    3. 自增长约束的字段只能是整数类型(TINYINT \ SMALLINT \ INT \ BIGINT等);
    4. 自增长约束字段的最大值受该字段的数据类型约束,如果达到上限,自增长约束就会失效。
  • 添加:

    # MySQL
    CREATE TABLE 表名(
        字段 类型 AUTO_INCREMENT
    ) [AUTO_INCREMENT = 初始值];
    
    # SQL server
    CREATE TABLE 表名(
        字段 类型 identity(起始值,自增值)
    );
    
  • 注意:插入数据时发生错误后,再次插入数据时自增列将不连续,而是在上一列加2:

4.4 外键约束

  • 关键词:FOREIGN KEY

  • 描述:保证引用完整性的极其重要部分。

  • 条件:

    1. 外键值必须在另一个表的主键列中;
    2. 外键值可以为NULL值;
    3. 一个表可以有一个或多个外键;
    4. 如果从主表删除某条记录时,需要先删除外键表的记录;
    5. 外键中列的数据类型必须和主键列的数据类型相同。
  • 添加:

    # 方法一:创建表时指定
    CREATE TABLE 表名(
        字段 类型 [CONSTRAINT 外键名] FOREIGN KEY(字段) REFERENCES 主键表(主键列)
    );
    
    # 方法二:对已有表添加
    ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(字段) REFERENCES 主键表(主键列);
    
  • 删除:

    ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
    
  • 同步更新行为:

    • CASCADE
      • 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
    • SET NULL
      • 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该表值为null。
    • 使用方法:在设置外键后面添加
      • ON UPDATE 更新行为
      • ON DELETE 更新行为

4.5 唯一约束

  • 关键词:UNIQUE

  • 描述:保证一列或多列中的数据是唯一的,类似主键,但有区别。

  • 条件:

    1. 表可以包含多个唯一约束,但每个表只允许一个主键;
    2. 唯一约束列可以包含NULL值(只能出现一次,唯一的NULL也算唯一值);
    3. 唯一约束列的值可重复使用;
    4. 与主键不一样,唯一约束不能用来定义外键。
  • 添加:

    # 方法一
    CREATE TABLE 表名(
        字段 类型 UNIQUE
    );
    
    # 方法二
    CREATE TABLE 表名(
    	字段 类型,
        [CONSTRAINT 约束名] UNIQUE(字段)
    );
    
    # 方法三
    ALTER TABLE 表名 ADD [CONSTRAINT 约束名] UNIQUE(字段);
    
  • 删除:

    ALTER TABLE 表名 DROP CONSTRAINT 约束名;
    ALTER TABLE 表名 DROP INDEX 字段;
    

4.6 检查约束

  • 关键词:CHECK

  • 描述:保证一列或多列中的数据满足指定的条件。

  • 条件:

    1. 检查最小或最大值;例如,防止0个物品的订单(即使0是合法的数)。
    2. 指定范围;例如,保证发货日期大于等于今天的日期,但不超过今天起一年后的日期。
    3. 只允许特定的值。例如,在性别字段中只允许M或F。
  • 添加:

    # 方法一
    CREATE TABLE 表名(
        字段 类型,
        CHECK(条件表达式)
    );
    
    # 方法二
    ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(条件表达式);
    
  • 删除:

    ALTER TABLE 表名 DROP CONSTRAINT 约束名;
    

4.7 默认值约束

  • 关键词:DEFAULT

  • 描述:指定某列的默认值,插入数据时如果没有指定值则使用默认值。

  • 条件:

    1. 默认约束通常用在已经设置了非空约束的列。
  • 添加:

    # 方法一
    CREATE TABLE 表名(
        字段 类型 DEFAULT 默认值
    );
    
    # 方法二:MySQL
    ALTER TABLE 表名 CHANGE COLUMN 字段 类型 DEFAULT 默认值;
    # 方法二:SQL server
    ALTER TABLE 表名 ADD CONSTRAINT 约束名 DEFAULT 默认值 FOR 字段;
    
  • 删除:将默认值设置为空null

    # MySQL
    ALTER TABLE 表名 CHANGE COLUMN 字段 字段 类型 DEFAULT NULL;
    # 方法二:SQLserver
    ALTER TABLE 表名 ADD CONSTRAINT 约束名 DEFAULT NULL FOR 字段;
    

4.8 非空约束

  • 关键词:NOT NULL

  • 描述:指定字段的值不能为空。

  • 添加:

    CREATE TABLE 表名(
        字段 类型 NOT NULL
    );
    
    ALTER TABLE 表名 CHANGE 字段 字段 类型 NOT NULL;
    
    ALTER TABLE 表名 MODIFY 字段 类型 NOT NULL;
    
  • 删除:

    ALTER TABLE 表名 CHANGE 字段 字段 类型 NULL;
    
    ALTER TABLE 表名 MODIFY 字段 类型 NULL;
    

4.9 查看表中的约束

# 显示表结构
DESC 表名;

# 显示创建表语句
SHOW CREATE TABLE 表名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值