• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySql级联删除跟更新_mysql

mysql 搞代码 7年前 (2018-06-07) 231次浏览 已收录 0个评论

mysql级联删除和更新

文章来源:http://blog.csdn.net/doupei2006/article/details/7949077

(一)利用外键实现级联删除

1、先建立测试数据库

CREATE TABLE `roottb` (   `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,   `data` VARCHAR(100) NOT NULL DEFAULT '',   PRIMARY KEY (`id`) ) TYPE=InnoDB;  CREATE TABLE `subtb` (   `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,   `rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',   `data` VARCHAR(100) NOT NULL DEFAULT '',   PRIMARY KEY (`id`),   INDEX (`rootid`),   FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE ) TYPE=InnoDB;

注意:数据表必须使用InnoDB引擎。

           外键必须建立索引

          外键绑定关系使用了“ on delete cascade ”

2、插入测试数据

INSERT INTO `roottb` (`id`,`data`)   VALUES ('1', 'test root line 1'),          ('2', 'test root line 2'),          ('3', 'test root line 3');  INSERT INTO `subtb` (`id`,`rootid`,`data`)   VALUES ('1', '1', 'test sub line 1 for root 1'),          ('2', '1', 'test sub line 2 for root 1'),          ('3', '1', 'test sub line 3 for root 1'),          ('4', '2', 'test sub line 1 for root 2'),          ('5', '2', 'test sub line 2 for root 2'),          ('6', '2', 'test sub line 3 for root 2'),          ('7', '3', 'test sub line 1 for root 3'),          ('8', '3', 'test sub line 2 for root 3'),          ('9', '3', 'test sub line 3 for root 3');

3、查看数据表的状态

4、试验级联删除功能

只删除roottb表中id为2的数据记录,看看subtb表中rootid为2的相关子纪录是否会自动删除!

mysql>; delete from `roottb` where `id`='2'; Query OK, 1 row affected (0.03 sec)  mysql>; select * from `roottb`; +----+------------------+ | id | data             | +----+------------------+ |  1 | test root line 1 | |  3 | test root line 3 | +----+------------------+ 2 rows in set (0.00 sec)  mysql>; select * from `subtb`; +----+--------+----------------------------+ | id | rootid | data                       | +----+--------+----------------------------+ |  1 |      1 | test sub line 1 for root 1 | |  2 |      1 | test sub line 2 for root 1 | |  3 |      1 | test sub line 3 for root 1 | |  7 |      3 | test sub line 1 for root 3 | |  8 |      3 | test sub line 2 for root 3 | |  9 |      3 | test sub line 3 for root 3 | +----+--------+----------------------------+ 6 rows in set (0.01 sec)

(二)利用触发器实现级联删除

下面给出实例

1、建立测试数据库

CREATE TABLE `root_trigger` (   `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,   `data` VARCHAR(100) NOT NULL DEFAULT '',   PRIMARY KEY (`id`) );  CREATE TABLE `sub_trigger` (   `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,   `rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',   `data` VARCHAR(100) NOT NULL DEFAULT '',   PRIMARY KEY (`id`)   );

2、插入测试数据

INSERT INTO `root_trigger` (`id`,`data`)   VALUES ('1', 'test root line 1'),          ('2', 'test root line 2'),          ('3', 'test root line 3');  INSERT INTO `sub_trigger` (`id`,`rootid`,`data`)   VALUES ('1', '1', 'test sub line 1 for root 1'),          ('2', '1', 'test sub line 2 for root 1'),          ('3', '1', 'test sub line 3 for root 1'),          ('4', '2', 'test sub line 1 for root 2'),          ('5', '2', 'test sub line 2 for root 2'),          ('6', '2', 'test sub line 3 for root 2'),          ('7', '3', 'test sub line 1 for root 3'),          ('8', '3', 'test sub line 2 for root 3'),          ('9', '3', 'test sub line 3 for root 3');

3、建立(级联/同步)删除的触发器

drop trigger if exists t_afterdelete_on_sub; create trigger t_afterdelete_on_sub after delete on root_trigger for each row begin        delete from sub_trigger where rootid=old.id;       end;

欢迎大家阅读《MySql级联删除跟更新_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySql级联删除跟更新_mysql

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址