上一篇只是讲述了外键约束的要求,并没有讲述外键约束的参照操作。这一次我来看看外键约束下的更新操作。 一外键约束的参照操作 我们进行外键约束的创建以后,在更新表的时候,子表是否也进行相应的更新。这是我们创建外键约束最大的好 处。有以下几种: 1)C
上一篇只是讲述了外键约束的要求,并没有讲述外键约束的参照操作。这一次我来看看外键约束下的更新操作。
一外键约束的参照操作
我们进行外键约束的创建以后,在更新表的时候,子表是否也进行相应的更新。这是我们创建外键约束最大的好
处。有以下几种:
1)CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。
2)SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指
定NOT NULL。
3)RESTRICT:拒绝对父表的删除或更新操作。
4)NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
二更新外键约束的字段准备工作
(1)创建一个子表users1
CREATE TABLE users1(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(10) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
);
SHOW CREATE TABLE users1;
(2)在父表provinces插入记录并且查看父表的记录信息:
INSERT provinces(pname) VALUES('A');
INSERT provinces(pname) VALUES('B');INSERT provinces(pname) VALUES('C');
SELECT * FROM provinces;
(3)在子表users1插入记录:
INSERT users1(username,pid) VALUES('Tom',3);
INSERT users1(username,pid) VALUES('John',3);
INSERT users1(username,pid) VALUES('Tom',6);
INSERT users1(username,pid) VALUES('Rose',1);
SELECT * FROM users1;
由上面结果知道:如果外键列pid字段的数字大于3就不会插入记录,这是因为外键列pid字段参照的是父表
provinces中的参照列id字段,既然父表中id字段只存在3条,那么子表users1中插入的pid字段当然不能大于3;但是插
入记录会存在索引,这就是上面结果显示的原因,也是id字段为1,2,4的原因。
三外键约束下的删除操作
假设我们把provinces数据表中的id=3的记录删除
DELETE FROM provinces WHERE id=3;
SELECT * FROM provinces;
SELECT * FROM users1;
既然删除做到了,那么更新数据也会做到同样的效果,这里就不再进行举例说明。
四更新操作参考
(1)ON DELETE操作
RESTRICT(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不
允许删除。
NO ACTION:意思同RESTRICT,即如果存在从数据,不允许删除主数据。
CASCADE(级联):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录否有对应外键,如果有则也删
除外键在子表(即包含外键的表)中的记录。
SET NULL:当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表
中该外键值为null(不过这就要求该外键允许取null)。
(2)ON UPDATE操作
RESTRICT(约束):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则
不允许更新。
NO ACTION:意思同RESTRICT。CASCADE(级联):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也
更新外键在子表(即包含外键的表)中的记录。
SET NULL:当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子
表中该外键值为null(不过这就要求该外键允许取null)。
注:NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执
行,后者具有最高的优先权执行。
五表级约束与列级约束
按照参照数目的多少来划分:分为表级约束和列级约束。
对一个数据列建立的约束,称为列级约束。列级约束既可以在列定义时声明,也可以在列定义后声明。
对多个数据列建立的约束,称为表级约束。表级约束只能在列定义后声明。
使用表级约束和列级约束需要注意的是:
1NOT NULL约束和DEFAULT约束不存在表级约束。其余的约束都存在列级约束和表级约束。
2实际开发过程中,列级约束使用的较多,表级约束很少使用。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

记事本++7.3.1
好用且免费的代码编辑器