ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL中的触发器 [打印本页]

作者: 美食家大橙子    时间: 2022-6-24 09:11
标题: MySQL中的触发器
1.定义:
  触发器和存储过程相似,都是嵌入到 MySQL 中的一段程序。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会激活触发器来执行相应的操作。这些事件称为触发条件,在MySQL中,有UPDATE,INSERT,和DELETE。
2.语法:
  1. CREATE TRIGGER TRIGGER_NAME
  2. BEFORE/AFTER
  3. UPDATE/INSERT/DELETE ON TABLE_NAME
  4. FOR EACH ROW
  5. #触发器主体
  6. [BEGIN]
  7. SQL操作
  8. [END];
复制代码
  1. # 创建一个触发器T1,在对表customer做插入操作时,就会触发T1,之后会在日志表note中插入一条数据
  2. CREATE TRIGGER T1
  3. AFTER
  4. INSERT ON customer
  5. FOR EACH ROW <br># 触发器主体
  6. INSERT INTO note(日期,目标,操作) VALUES(NOW(),'customer','insert');
复制代码
3.删除触发器
  和删除表和存储过程类似,都是使用DROP语句来删除触发器。
  1. #删除触发器T1
  2. DROP TRIGGER IF EXISTS T1;
复制代码
4.查询触发器
  1. #在已知数据库内,查询触发器<br>SHOW TRIGGERS;<br>SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'
  2. #查询所有的触发器
  3. SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')<br>
复制代码
5.触发器类型OLD和NEW的使用
  触发器在DDL操作之前或者之后触发,总会对目标表做出一定的改动,有时我们需要知道目标表改变前后的值,这就用到了OLD和NEW的用法。
       顾名思义,OLD就是改变之前的值,是UPDATE之前或者是要被DELETE或者已经被DELETE的值。
  而NEW,则是UPDATE之后的新值,即将INSERT或者已经INSERT的值。
  具体实例:
  1. #创建customer表
  2. CREATE TABLE `customer`
  3. (`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
  4. `CUST_NAME` varchar(10) NOT NULL,
  5. `CUST_TEL` varchar(10) DEFAULT NULL,
  6. PRIMARY KEY (`CUST_ID`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br>
  8. #向表中插入数据<br>
  9. #创建一个update触发器
  10. CREATE TRIGGER T2
  11. AFTER
  12. UPDATE ON customer
  13. FOR EACH ROW
  14. #old和new的使用方法:old.columnname/new.columnname(列名)
  15. #将更新前后的值,赋值给两个变量
  16. SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;<br><br>#触发触发器T2<br>UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';<br><br>#查询OLD和NEW<br>SELECT @OLD_ID,@NEW_ID;
复制代码
 
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4