各位用户为了找寻关于MySQL触发器 Update触发Insert失败的资料费劲了很多周折。这里教程网为您整理了关于MySQL触发器 Update触发Insert失败的相关资料,仅供查阅,以下为您介绍关于MySQL触发器 Update触发Insert失败的详细内容
今天工作需要,想要实现将仅对状态更新的表进行历史记录显示,于是考虑在原表中建立触发器,将更新的内容同时写入另一张表
于是进行测试
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27--建立测试表CREATE TABLE `triggletest_triggle` (
`id`
INT
(11)
NOT
NULL
,
`
name
`
VARCHAR
(5)
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(`id`)
)
COLLATE
=
'latin1_swedish_ci'
ENGINE=InnoDB
--建立目标表
CREATE
TABLE
`triggletest` (
`seq`
INT
(11)
NOT
NULL
,
`id`
INT
(11)
NOT
NULL
,
`
name
`
VARCHAR
(5)
NULL
DEFAULT
NULL
,
PRIMARY
KEY
(`seq`),
INDEX
`id` (`id`)
)
COLLATE
=
'latin1_swedish_ci'
ENGINE=InnoDB;
---写入测试数据
INSERT
INTO
`triggletest_triggle`
VALUES
(1,
'A'
);
--建立触发器
DROP
TRIGGER
if EXISTS test1
CREATE
TRIGGER
test1
AFTER
UPDATE
ON
triggletest_triggle
FOR
EACH ROW
BEGIN
INSERT
INTO
triggletest(id)
values
(new.id);
END
执行触发器语句,报错,报错内容如下:
? 1 2 3 4 5 6 7 8 9 10/* SQL错误(1064):You have an error
in
your SQL syntax;
check
the manual that corresponds
to
your MySQL server version
for
the
right
syntax
to
use near
'CREATE TRIGGER test1
AFTER UPDATE ON triggletest_triggle
FOR EACH ROW
BEGIN '
at
line 2 */
---最终实现代码
DROP
TRIGGER
if EXISTS test1;
CREATE
TRIGGER
test1
AFTER
UPDATE
ON
test.triggletest_triggle
FOR
EACH ROW
BEGIN
INSERT
INTO
triggletest(id,
name
)
values
(new.id,new.
name
);
END
;
分析,由于访问工具HediSQL,导致无法正常创建触发器,相同语句,在HediSQL中执行,报错,使用shell调用mysql,直接执行程序,成功。
原文链接:http://www.cnblogs.com/magic-forever/archive/2016/07/07/5649868.html