码迷,mamicode.com
首页 > 其他好文 > 详细

常见约束

时间:2020-07-08 23:15:08      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:专业   dex   stun   expand   modify   其它   key   exist   inf   

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性。

分类六大约束

  1. NOT NULL:非空,用于保证该字段的值不能为空,比如姓名、学号等。

  2. DEFAULT:默认,用于保证该字段有默认的值。

  3. PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空。比如学号、员工编号等。

  4. UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。比如座位号等。

  5. CHECK:检查约束 【mysql中不支持】。比如年龄,性别。

  6. FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值。在从 表添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号等。

添加约束的时机:

  1. 创建表的时候。

  2. 修改表的时候。

    注意 :在表中数据添加之前。

约束的添加分类:

  1. 列级约束:六大约束语法上都支持,但外键约束没有效果。

  2. 表级约束:除了非空和默认 ,其它的都支持。

  例子: 

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

 

创建表时添加约束:

  1. 添加列级约束:

    语法:直接在字段名和类型后面追加 约束类型即可。只支持:默认 、非空 、 主键 、 唯一。

  2. 添加表级约束:

    语法:在各个字段的最下面,[ constraint 约束名 ] 约束类型(字段名)。

举个栗子:

#通用的写法
CREATE TABLE IF NOT EXISTS stuinfo(
        id INT PRIMARY KEY,
        stuname VARCHAR(20) NOT NULL,
        gender CHAR(1),
        age INT DEFAULT 18,
        seat INT UNIQUE,
        majorid INT,
        CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
) 

 

主键 和 唯一的大对比:

 保证唯一性是否允许为空一个表中可以有多少个是否允许组合
主键 可以 不允许 最多一个 可以,但不推荐
唯一 可以 允许(只允许一个为空) 可以多个 可以,但不推荐

外键:

  1. 要求在从表设置外键关系。

  2. 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求。

  3. 主表的关联列必须是一个 key (一般是 主键 或 唯一 )。

  4. 插入数据时,先插入主表,再插入从表。

  5. 删除数据时,先删除从表,再删除主表。


修改表时添加约束:

添加列级约束:

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

 

添加表级约束:

ALTER TABLE 表名 ADD [ CONSTRAINT 约束名 ] 约束类型(字段名) [ 外键的引用 ];
添加非空约束:
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
添加默认约束:
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
添加主键: #列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id); 添加唯一: #列级约束 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
#表级约束
ALTER TABLE stuinfo ADD UNIQUE(seat);
添加外键:
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);

修改表时删除元素

  1. 删除非空约束:

    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
  2. 删除默认约束:

    ALTER TABLE stuinfo MODIFY COLUMN age INT;
  3. 删除主键:

    ALTER TABLE stuinfo DROP PRIMARY KEY;
  4. 删除唯一:

    ALTER TABLE stuinfo DROP INDEX seat;
  5. 删除外键:

    ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

常见约束

标签:专业   dex   stun   expand   modify   其它   key   exist   inf   

原文地址:https://www.cnblogs.com/lililixuefei/p/13269500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!