触发器before和after区别

您所在的位置:网站首页 before跟after的运用 触发器before和after区别

触发器before和after区别

2023-10-03 04:39| 来源: 网络整理| 查看: 265

触发器before和after区别

创建触发器时,在before和after的选择上,有些区分,下面是一个实例,希望对你有所启发

1、建立一个通信录数据库,要求需要有以下三个表: lxrenb(联系人表)其字段为(联系人编号、姓名、联系电话、家庭地址), thjlb(通话记录表)其字段为(通话记录编号、联系人编号、通话开始时间、通知结束时间、通话类别、通话状态), dxjlb(短信记录表)其字段为(短信记录编号、联系人编号、接发时间、短信内容、短信类别)。 数据库名为:TXLSJK。字段名以及字段数据类型可自拟。 2、在联系人表中插入以下5条记录: (1,董小姐,123456789,河南洛阳市爱情路521号) 3、在通话记录表中插入以下一条记录: (1,1,当前系统时间,当前系统时间,语音通话,1) 4、在短信记录表中插入以下一条记录: (1,1,当前系统时间,你的爱情已到请速来领取,1) 5、在联系人表上建立一个触发器,当删除联系人时,删除该联系人的通话记录和短信记录

#首先建好数据库和表,记得表之间要有外键约束

CREATE DATABASE TXLSJK DEFAULT CHARACTER SET ='utf8'; DROP TABLE IF EXISTS lxrenb; CREATE TABLE lxrenb( lid INT(10) AUTO_INCREMENT PRIMARY KEY, lname VARCHAR(20), lnum VARCHAR(20), laddress VARCHAR(20) ); DROP TABLE IF EXISTS thjlb; CREATE TABLE thjlb( tid INT(10) AUTO_INCREMENT, tlid INT(10), tbegin DATETIME, tend DATETIME, tcategory VARCHAR(20), tstate VARCHAR(20), PRIMARY KEY(tid), FOREIGN KEY (tlid) REFERENCES lxrenb(lid) ); DROP TABLE IF EXISTS dxjlb; CREATE TABLE dxjlb( did INT(10) AUTO_INCREMENT PRIMARY KEY, dlid INT(10), dtime DATE, dtext VARCHAR(20), dcategory VARCHAR(20), FOREIGN KEY (dlid) REFERENCES lxrenb(lid) );

#插入各表数据

INSERT INTO lxrenb VALUES(1,'董小姐','123456789','河南洛阳市爱情路521号'); INSERT INTO thjlb VALUES(1,1,NOW(),NOW(),'语音通话','1'); INSERT INTO dxjlb VALUES(1,1,CURDATE(),'你的爱情已到请速来领取','1');

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

#如果选用after创建触发器

DROP TRIGGER IF EXISTS dropinformation; DELIMITER $$ CREATE TRIGGER dropinformation AFTER DELETE ON lxrenb FOR EACH ROW BEGIN DELETE FROM thjlb WHERE tlid=old.lid; DELETE FROM dxjlb WHERE dlid=old.lid; END $$ DELIMITER ;

#测试,删除联系人董小姐

DELETE FROM lxrenb WHERE lid=1;

#会报错误 在这里插入图片描述

这个错误是因为:通信记录表和短信记录表里面有外键约束,即:想要从联系人表里面删除联系人董小姐,必须先删除通信记录表和短信记录表里面有关董小姐的信息,所以在删除联系人之前,必须先删除通信记录表和短信记录表里面的信息,所以要用before

#选用before,创建触发器

DROP TRIGGER IF EXISTS dropinformation; DELIMITER $$ CREATE TRIGGER dropinformation BEFORE DELETE ON lxrenb FOR EACH ROW BEGIN DELETE FROM thjlb WHERE tlid=old.lid; DELETE FROM dxjlb WHERE dlid=old.lid; END $$ DELIMITER ;

#测试,删除联系人董小姐

DELETE FROM lxrenb WHERE lid=1;

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 #所有表中有关董小姐的信息都被删除 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

以上便是用一个示例展示了创建触发器时,选用before与after的区别。 一般来说,创建触发器时,用before比after更常见些。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3