目录
foreign key(外键)介绍
- foreign key(外键) 用于定义主表和从表之间的关系:外键约束要定义在从表上,主表则必须具有主键约束或是unique约束.,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null(学生/班级 图示)
- FOREIGN KEY (本表字段名) REFERENCES 主表名(主键名或unique字段名)
- 学生表(从表) id name class_id 班级表(主表) id class_name
指定外键关系 FOREIGN KEY (class_id) REFERENCES my_class(id))
foreign key(外键)细节
- 外键指向的表的字段,要求是primary key 或者是 unique
- 表的类型是innodb,这样的表才支持外键
- 外键字段的类型要和主键字段的类型一致(长度可以不同)
- 外键字段的值,必须在主键字段中出现过,或者为null [前 提是外键字段允许为null」
- 一旦建立主外键的关系,数据不能随意删除了.
-- 外键演示-- 创建 主表 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
- 用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并 要求sal列值在1000~2000之间如果不再1000~2000之间就会提 示出错。
- 基本语法:列名 类型 check(check条件) user 表 id, name, sex(man,woman), sal(大于100 小于 900)
- 在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;
本文转载自: https://blog.csdn.net/qq_59708493/article/details/126520576
版权归原作者 Demo龙 所有, 如有侵权,请联系我们删除。
版权归原作者 Demo龙 所有, 如有侵权,请联系我们删除。