问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySQL中如何定义trigger?

发布网友 发布时间:2022-04-26 13:16

我来回答

3个回答

热心网友 时间:2022-04-08 12:35

对的,MYSQL不用referencing,百度可以搜索MYSQL5中文手册呀,说得非常非常清楚,我粘贴到下面:

21.1. CREATE TRIGGER语法

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

触发程序与命名为tbl_name的表相关。tbl_name必须引用永久性表。不能将触发程序与TEMPORARY表或视图关联起来。

trigger_time是触发程序的动作时间。它可以是BEFORE或AFTER,以指明触发程序是在激活它的语句之前或之后触发。

trigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:

· INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。

· UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。

· DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。

请注意,trigger_event与以表操作方式激活触发程序的SQL语句并不很类似,这点很重要。例如,关于INSERT的BEFORE触发程序不仅能被INSERT语句激活,也能被LOAD DATA语句激活。

可能会造成混淆的例子之一是INSERT INTO .. ON DUPLICATE UPDATE ...语法:BEFORE INSERT触发程序对于每一行将激活,后跟AFTER INSERT触发程序,或BEFORE UPDATE和AFTER UPDATE触发程序,具体情况取决于行上是否有重复键。

对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。例如,对于某一表,不能有两个BEFORE UPDATE触发程序。但可以有1个BEFORE UPDATE触发程序和1个BEFORE INSERT触发程序,或1个BEFORE UPDATE触发程序和1个AFTER UPDATE触发程序。

trigger_stmt是当触发程序激活时执行的语句。如果你打算执行多个语句,可使用BEGIN ... END复合语句结构。这样,就能使用存储子程序中允许的相同语句。请参见20.2.7节,“BEGIN ... END复合语句”。

在MySQL 5.1中,可以编写包含按名称对表进行直接引用的触发程序,如下例中所示的名为testref的触发程序:

CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);

DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END
|

DELIMITER ;

INSERT INTO test3 (a3) VALUES
(NULL), (NULL), (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL), (NULL), (NULL);

INSERT INTO test4 (a4) VALUES
(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);
如果将下述值插入表test1,如下所示:

mysql> INSERT INTO test1 VALUES
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.01 sec)
Records: 8 Duplicates: 0 Warnings: 0
那么4个表中的数据如下:

mysql> SELECT * FROM test1;
+------+
| a1 |
+------+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test2;
+------+
| a2 |
+------+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test3;
+----+
| a3 |
+----+
| 2 |
| 5 |
| 6 |
| 9 |
| 10 |
+----+
5 rows in set (0.00 sec)

mysql> SELECT * FROM test4;
+----+------+
| a4 | b4 |
+----+------+
| 1 | 3 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 0 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
+----+------+
10 rows in set (0.00 sec)
使用别名OLD和NEW,能够引用与触发程序相关的表中的列。OLD.col_name在更新或删除它之前,引用已有行中的1列。NEW.col_name在更新它之后引用将要插入的新行的1列或已有行的1列。

激活触发程序时,对于触发程序引用的所有OLD和NEW列,需要具有SELECT权限,对于作为SET赋值目标的所有NEW列,需要具有UPDATE权限。

注释:目前,触发程序不会被级联的 外键动作激活。该*将会被尽早放宽。

CREATE TRIGGER语句需要SUPER权限。

热心网友 时间:2022-04-08 13:53

触发器(trigger)是指隐含执行的存储过程procere,当定义触发器时必须要指定触发事件和触发的操作,通常触发事件包括insert,update,delete语句,触发器实际上就是一个pl/sql(procere language/Structured Query Language).create trigger来创建触发器;
作用;
a.允许/*对表的修改
b.自动派生列,如自增字段
c.强制数据的一致性
d.提供审计和日志记录
e.防止无效的事务处理
f.启动复杂的业务逻辑
insert into employee values(emp_seq.nextval,'Janney',10,'1');
---插入一条数据
update employee set employee.empname='Alex' where employee.empid='12';
--根新empid=15的数据.

热心网友 时间:2022-04-08 15:27

重新定义结束符就可以了
delimiter $
create trigger student_update before update on student
for each row
if new.student_birth='0-0-0' then set new.student_birth=null;
end if$
delimiter ;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
圣斗士星矢正义传说攻略_圣斗士星矢正义传说新手攻略 圣斗士星矢正义传说怎么觉醒圣衣 圣衣玩法攻略 圣斗士星矢正义传说召唤石怎么获得 获取攻略一览 超市促销员手机上打卡迟到几分钟 在超市里打卡显示的公司是什么意思? 长鹿休闲度假农庄交通指南 求从容桂到长鹿农庄怎么坐车,详细,准确 形容神情的五字词语 女生内衣穿多久该扔掉 吴江离张家港有多远? mysql 事件 系统参数 mysq Navicat 8中 l触发器 请教 mysql中的全文本搜索用在什么情况下? 贷款买房如何办理过户 买方贷款买房,如何过户 我已买房是贷款,写的是我的名字,父母的房子要给我怎么过户 我用小叔子名字贷款买房现在贷款未还清贷款,现在能过户到我自己的名下吗? 有贷款的房子怎么过户给未成年子女? 商业贷款买房如何过户?过户所需材料有哪些? 用妹妹名字贷款买房怎么过户 有贷款的房子怎么过户给别人 没还清贷款,房子怎么过户? 夫妻双方贷款买房,房产证上为2个人得名字,没有离婚,房产证怎么能过户到一个人名下? 商业贷款买房怎么过户 华为mate20手电筒中间是不是有一横的? 发财树寓意好,发财树什么时候开花? 发财树开花代表什么好兆头呢? “歼”字的拼音是什么? 歼10 、歼11 、歼15,哪个厉害? 中国”歼“系列飞机都有那些机型,分别是有哪些特点 你有一个错误的SQL语法检查手册对应到你的MySQL java正则表达式解析Mysql数据库错误日志 mysql 语句 这句话是什么意思 凉拌蒲公英怎么做 mysql_pconnect() 和 mysql_connect()区别,结果和手册讲得正好相反... mysql怎么设置thread 西餐三宝是哪几种原料? 西餐厨房三宝是什么 西餐调料三宝是那几样? 做酱牛肉洋葱能代替大葱吗 在家做一顿西餐都需要些什么东西呢? 【崇文门 —— 东单 —— 建国门 —— 国贸】沿线有无清静的西餐厅? 前门前怎么样?好不好?值不值得买? 开车从望京如何到新桥三宝乐西餐厅怎么走 前门前周边环境怎么样?生活便利吗? 360手机助手可以恢复微信聊删除吗天记录 删除的微信好友用360手机助手怎么恢复 微信上的朋友删除了还能恢复吗 m.cz88.net 高校教师资格证能全国通用吗? 高校教师资格证是全国通用的吗