0


mysql约束——foreign key(外键)和check

目录

foreign key(外键)介绍

  1. foreign key(外键) 用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是unique约束.,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null(学生/班级 图示)
  2. FOREIGN KEY (本表字段名) REFERENCES 主表名(主键名或unique字段名)
  3. 学生表(从表) id name class_id 班级表(主表) id class_name

指定外键关系 FOREIGN KEY (class_id) REFERENCES my_class(id))

foreign key(外键)细节

  1. 外键指向的表的字段,要求是primary key 或者是 unique
  2. 表的类型是innodb,这样的表才支持外键
  3. 外键字段的类型要和主键字段的类型一致(长度可以不同)
  4. 外键字段的值,必须在主键字段中出现过,或者为null [前 提是外键字段允许为null」
  5. 一旦建立主外键的关系,数据不能随意删除了.
-- 外键演示-- 创建 主表 my_classCREATETABLE my_class (
    id INTPRIMARYKEY,-- 班级编号`name`VARCHAR(32)NOTNULLDEFAULT'');-- 创建 从表 my_stuCREATETABLE my_stu (
    id INTPRIMARYKEY,-- 学生编号`name`VARCHAR(32)NOTNULLDEFAULT'',
    class_id INT,-- 学生所在班级的编号-- 下面指定外键关系FOREIGNKEY(class_id)REFERENCES my_class(id))-- 测试数据INSERTINTO my_class 
    VALUES(100,'java'),(200,'web');INSERTINTO my_class 
    VALUES(300,'php');SELECT*FROM my_class;INSERTINTO my_stu 
    VALUES(1,'tom',100);INSERTINTO my_stu 
    VALUES(2,'jack',200);INSERTINTO my_stu 
    VALUES(3,'hsp',300);INSERTINTO my_stu 
    VALUES(4,'mary',400);-- 这里会失败...因为400班级不存在INSERTINTO my_stu 
    VALUES(5,'king',NULL);-- 可以, 外键 没有写 not nullSELECT*FROM my_class;SELECT*FROM my_stu;-- 一旦建立主外键的关系,数据不能随意删除了DELETEFROM my_class
    WHERE id =100;

在这里插入图片描述

2.check

  1. 用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并 要求sal列值在1000~2000之间如果不再1000~2000之间就会提 示出错。
  2. 基本语法:列名 类型 check(check条件) user 表 id, name, sex(man,woman), sal(大于100 小于 900)
  3. 在mysql中实现check的功能,一般是在程序中控制, 或者通过触发器完成。
-- 演示check的使用-- mysql5.7目前还不支持check ,只做语法校验,但不会生效-- 了解 -- 学习 oracle, sql server, 这两个数据库是真的生效.-- 测试CREATETABLE t23 (
    id INTPRIMARYKEY,`name`VARCHAR(32),
    sex VARCHAR(6)CHECK(sex IN('man','woman')),
    sal DOUBLECHECK( sal >1000AND sal <2000));-- 添加数据INSERTINTO t23 
    VALUES(1,'jack','mid',1);SELECT*FROM t23;

在这里插入图片描述

标签: mysql 数据库 sql

本文转载自: https://blog.csdn.net/qq_59708493/article/details/126520576
版权归原作者 Demo龙 所有, 如有侵权,请联系我们删除。

“mysql约束&mdash;&mdash;foreign key(外键)和check”的评论:

还没有评论