8Python全栈之路系列之MySQL触发器
admin
2023-05-19 04:02:12
0

Python全栈之路系列之MySQL触发器

l

对某个表进行增/删/改操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行增/删/改前后的行为。


创建触发器基本语法

插入前

CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
    ...
END

插入后

CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
    ...
END

删除前

CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
    ...
END

删除后

CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
    ...
END

更新前

CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
    ...
END

更新后

CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
    ...
END

触发器实例

创建一个user_info表和user_info_back表,里面有UID,Name,Password,E-mil列;

CREATE TABLE `user_info` (
  `UID` int(5) NOT NULL AUTO_INCREMENT,
  `Name` char(15) NOT NULL,
  `Password` varchar(32) DEFAULT NULL,
  `Email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`UID`,`Name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `user_info_back` (
  `UID` int(5) NOT NULL AUTO_INCREMENT,
  `Name` char(15) NOT NULL,
  `Password` varchar(32) DEFAULT NULL,
  `Email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`UID`,`Name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建一个插入前的触发器

触发器的作用就是在往user_info表中插入数据之前进入tri_before_insert_tb1触发器,执行里面的操作

delimiter %
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON user_info FOR EACH ROW
BEGIN
-- 如果插入时的Name="as"
IF NEW.Name = "ansheng" THEN
    -- 那么就把这条数据先插入user_info_back表中,数据相同
    INSERT INTO user_info_back(Name,Password,Email) VALUES(NEW.Name,NEW.Password,NEW.Email);
END IF;
END%
delimiter ;

使用触发器

触发器无法由用户直接调用,而知由于对表的增/删/改操作被动引发的。

user_info表中插入两条数据

INSERT INTO user_info(Name,Password,Email) VALUES("ansheng","ansheng","ansheng@ansheng.me"),("root","r","root@ansheng.me");

查看表中的数据

mysql> select * from user_info;
+-----+---------+----------+--------------------+
| UID | Name    | Password | Email              |
+-----+---------+----------+--------------------+
|   1 | ansheng | ansheng  | ansheng@ansheng.me |
|   2 | root    | r        | root@ansheng.me    |
+-----+---------+----------+--------------------+
2 rows in set (0.00 sec)
mysql> select * from user_info_back;
+-----+---------+----------+--------------------+
| UID | Name    | Password | Email              |
+-----+---------+----------+--------------------+
|   1 | ansheng | ansheng  | ansheng@ansheng.me |
+-----+---------+----------+--------------------+
1 row in set (0.00 sec)

删除触发器

DROP TRIGGER tri_after_insert_tb1;

NEW表示即将插入的数据行,OLD表示即将删除的数据行,对于INSERT语句,只有NEW是合法的,对于DELETE语句,只有OLD才合法,而UPDATE语句可以在和NEW以及OLD同时使用


#Python全栈之路

相关内容

热门资讯

宁波打造人工智能OPC滨海创业... “嘀、嘀、嘀……”识别到安全围栏内还有人员作业后,系统发出警报提示,安全门也无法落锁。在宁波高新区纬...
万泰机电取得内齿跳动测量装置专... 国家知识产权局信息显示,万泰机电工业(昆山)有限公司取得一项名为“一种内齿跳动测量装置”的专利,授权...
视频丨观影流量变消费增量 “电... 光影流转赋能消费升级,跨界融合激活增长引擎。截至目前,2026年度全国电影总票房(含预售)已突破14...
备战年底县市选战,国民党拟7月... 海峡导报综合报道 国民党备战年底县市选战,县市长参选人大多已底定,仅剩台北等6县市争取连任的县市长尚...
吴宗宪选战起手式!蒋万安以“宜... 海峡导报综合报道 国民党宜兰县长参选人吴宗宪将于19日在凯旋宴会广场举办首场大型恳托会,台北市长蒋万...
赖清德执政两年,蓝营民代批:对... 海峡导报综合报道 台湾地区领导人赖清德即将执政满两年,国民党民代许宇甄17日表示,检视赖当局过去2年...
数智筑基·港启新篇 达梦数据2... 活动现场 5月15日,达梦数据2026香港新品发布会举行,最新数据库管理系统DM9、新一代数据库一体...
多家银行关停独立信用卡App,... 中国银行本周发布公告,信用卡专属手机应用程序“缤纷生活”将从7月1日起停止服务,此前,多家银行也陆续...
免月租按量计费?联通有低消,移... 新京报贝壳财经讯(记者韦英姿)近日,有消息称“三大运营商即将全面推出免月租、按量计费套餐”,对此,新...
新研究揭示巨型钻石是怎样形成的 南非开普敦大学主导的一项研究就CLIPPIR钻石的形成原因给出新的线索,研究认为这类巨型且罕见的钻石...