jen*_*jen 5 mysql database triggers
在表a上的操作之后,我写了一个触发器来在表b中插入一行.出于某种原因,如果我在插入后添加此触发器然后插入一行,则无效.但是,如果我将触发器添加为"更新后"并更新行,它确实有效.
这是触发器代码.当我用'AFTER INSERT'替换'AFTER UPDATE'并进行插入时,插入新行时没有任何反应.创建触发器时我没有错误,我也没有尝试更新触发器所在的同一个表.任何帮助表示赞赏!谢谢,Jen
drop trigger if exists insertUndecided;
DELIMITER //
CREATE TRIGGER insertUndecided
AFTER UPDATE ON jiraissue
FOR EACH ROW
BEGIN
insert into nodeassociation (SOURCE_NODE_ID, SOURCE_NODE_ENTITY, SINK_NODE_ID, SINK_NODE_ENTITY, ASSOCIATION_TYPE, SEQUENCE)
select
NEW.id as SOURCE_NODE_ID,
'Issue' as SOURCE_NODE_ENTITY,
(select pv.id from projectversion pv
where pv.vname='undecided'
and pv.project=NEW.project ) as SINK_NODE_ID,
'Version' as SINK_NODE_ENTITY,
'IssueFixVersion' as ASSOCIATION_TYPE,
NULL as SEQUENCE
from dual where exists
(select pkey from jiraissue
where id=NEW.id and id not in
(select distinct source_node_id from nodeassociation
where source_node_entity='Issue' and SINK_NODE_ENTITY='Version'
and ASSOCIATION_TYPE='IssueFixVersion') );
END;//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
在带有 InnoDB 表的 MySQL 5.5.20 上,我在简化的测试中重现了您的情况。两者都使用触发器表中引用新行的结果进行插入,并使用新值直接插入效果很好
CREATE TABLE test1(a1 INT NOT NULL auto_increment, b1 INT, PRIMARY KEY (a1) );
CREATE TABLE test2(a1 INT, b1 INT);
CREATE TABLE test3(a1 INT, b1 INT);
DELIMITER ;;
CREATE TRIGGER testAI AFTER INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a1 = NEW.a1, b1 = NEW.b1;
INSERT INTO test3 ( a1, b1 ) SELECT a1, b1 FROM test1 WHERE a1 = NEW.a1;
END;
;;
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
扣动扳机
INSERT INTO test1 (b1) VALUES (1),(2),(3);
Run Code Online (Sandbox Code Playgroud)
直接从新值插入
mysql> SELECT * FROM test2;
+------+------+
| a1 | b1 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+------+------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
从 SELECT 结果插入
mysql> SELECT * FROM test3;
+------+------+
| a1 | b1 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+------+------+
3 rows in set (0.00 sec)
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.5.20 |
+-----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
因此这适用于 auto_increment 和显式插入的值。你的问题一定出在其他地方
| 归档时间: |
|
| 查看次数: |
1412 次 |
| 最近记录: |