回来最上边的语法,差不多意思是:

政工的起因是这样的:作者有一职员消息表
pers。因为字段许多,就把中文字段单出来,另建了多个表 perscn。小编梦想当
pers 插入一条记下,perscn
也能半自动插入一条记下,那样就能够确定保障两张表的笔录1壹对应。MySQL中的触发器正好满意这么些须求。然则也是研商了半天才最后消除。

其中,第5步的 trigger_body
一般只可以写1行。假如有多条操作语句,则供给先用 DELIMITEBMWX伍临时改动下语句甘休符,然后用 BEGIN…END…
语句来写操作语句(因为BEGIN…END…里总得用半角分号 “;”
来标志壹行语句的扫尾,所以才要求用 DELIMITE途乐)。关于改换DELIMITER,请见官方文书档案的躬体力行:

废话不说,先上语法:

因为须要得到 pers 表中插入记录的 ID(本表中字段名称为 pid),一齐头想着用
LAST_INSERT_ID(),行不通。后来想到 MAX(),倒是能博取最新插入的 pid
值,但 perscn 中的别的值却无法用 SELECT sname FROM pers WHERE pid =
MAX(pid); 来获取,看来在 WHERE 语句中是不能够用 MAX() 函数吧……
最后不得不用笨办法,先对 pid 实行降序排列,然后用 LIMIT 限制 一条记下,那样倒是也能博取与 MAX() 函数同样的功力。不能,正是那样笨……

先上代码:

前几日第3次用MySQL的触发器,怕忘了,赶紧写篇博客记录一下。

1 mysql> delimiter //
2 mysql> CREATE PROCEDURE dorepeat(p1 INT)
3     -> BEGIN
4     ->   SET @x = 0;
5     ->   REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
6     -> END
7     -> //
8 Query OK, 0 rows affected (0.00 sec)
9 mysql> delimiter ;

触发器真是个好东西,自动化的神器啊…… 改天好好再商讨切磋、开采开掘~~~

1 CREATE TRAV4IGGESportage 触发器名称 二 在 INSERT、UPDATE或DELETE动作以前或之后
3 ON 上述动作所效劳的表
4503.com,4 FO逍客 EACH ROW(规定语句,照抄吧)
五 以上动作所接触的SQL语句(即健康SQL操作语句)

以上代码大概是说:

一 制造触发器 t_pers_perscn
二 在 pers 插入新记录之后
3 对于每一条记下
4 往 perscn 插入一条记下,包蕴 四 个字段,值分别是(
5 (pid),
6 (sname),
7 (oname),
8 (unic)
9 );

1 CREATE TRIGGER t_pers_perscn
2 AFTER INSERT ON pers
3 FOR EACH ROW
4 INSERT INTO perscn(pid, sname, oname, unic) VALUES(
5 (SELECT MAX(pid) FROM pers),
6 (SELECT sname FROM pers ORDER BY pid DESC LIMIT 1),
7 (SELECT oname FROM pers ORDER BY pid DESC LIMIT 1),
8 (SELECT unic FROM pers ORDER BY pid DESC LIMIT 1)
9 );
1 CREATE TRIGGER trigger_name
2 { BEFORE | AFTER } { INSERT | UPDATE | DELETE }
3 ON tbl_name
4 FOR EACH ROW
5 trigger_body