欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > MySQL触发器

MySQL触发器

2025/2/8 8:13:19 来源:https://blog.csdn.net/2303_78135757/article/details/145470340  浏览:    关键词:MySQL触发器

触发器

满足了某些条件,触发了另外一件事。

什么条件触发:insert, delete, update

什么时候触发:前、后

触发频率:针对每一行执行

触发器定义在表上

!!!!!!警告:触发器尽量少用,不建议用!!

* 忘记触发器

* 耗时0.001s => insert 100000 => 100s

product 创建了一个触发器INSERT AFTER -> 对time表insert

修改了time表表结构 id

product => INSERT INTO TABLE VALUES (1,2,3,4,5)

会导致插入失败,因为触发器的表结构更改

用处:

日志记录

日志表 => who time 做了什么...

代码 -> python /shell -> 操作 + 日志 -> 便于追踪和审计

创建触发器:

CREATE TRIGGER <触发器名>

trigger_time(BEFORE|AFTER) trigger_event(INSERT|DELETE|UPDATE)

ON table FOR EACH ROW

trigger_body(执行语句)

测试触发器

创建time表用于触发器测试

>DROP TABLE IF EXISTS time;

>CREATE TABLE time(

-> id INT PRIMARY KEY AUTO_INCREMENT,

-> t DATETIME);

创建触发器

>CREATE TRIGGER trig1 AFTER INSERT ON product FOR EACH ROW INSERT INTO time(t) VALUES(NOW());

插入数据

>INSERT INTO product VALUES (111, 'test', 111, 'c2');

查看触发器是否触发成功-->time表有没有插入数据

>SELECT * FROM time;

+----+---------------------+

| id | t |

+----+---------------------+

| 1 | 2025-01-14 11:25:02 |

+----+---------------------+

>INSERT INTO product VALUES (112, 'test', 111, 'c2'),(113,'test',111,'c1');

>SELECT * FROM time;

+----+---------------------+

| id | t |

+----+---------------------+

| 1 | 2025-01-14 11:25:02 |

| 2 | 2025-01-14 11:25:57 |

| 3 | 2025-01-14 11:25:57 |

+----+---------------------+

定义触发器执行多条SQL语句

定义语句的分隔符(默认为;)常用 || / $$

DELIMITER ||

CREATE TRIGGER trig2 BEFORE INSERT

ON product FOR EACH ROW

BEGIN

INSERT INTO time(t)VALUES(now());

INSERT INTO time(t) VALUES(now());

END||

DELIMITER ; 把语句的分隔符定义回来

测试触发器是否会执行多条SQL语句

(多了三条--》第一个触发器一条第二个触发器两条--》成功)

>INSERT INTO product VALUES (114, 'test', 111, 'c2');

>SELECT * FROM time;

+----+---------------------+

| id | t |

+----+---------------------+

| 1 | 2025-01-14 11:25:02 |

| 2 | 2025-01-14 11:25:57 |

| 3 | 2025-01-14 11:25:57 |

| 4 | 2025-01-14 11:35:24 |

| 5 | 2025-01-14 11:35:24 |

| 6 | 2025-01-14 11:35:24 |

+----+---------------------+

查看触发器

>SHOW TRIGGERS\G

>SHOW CREATE TRIGGER trig2\G

>SELECT * FROM information_schema.triggers\G

>SELECT * FROM information_schema.triggers WHERE trigger_name="trig2"\G

删除触发器

DROP TRIGGER trig1;

DROP TRIGGER trig2;

修改触发器:很多数据库版本不支持ALTER TRIGGER

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com