[英]create trigger on update to insert old values into other table in MYSQL
我有兩張桌子。 第一個是我的person表,它有id,name,creation_date作為值,我有一個old_person表(id,name,modified_date),我想在實際更改之前填充person的值。 我該怎么辦呢? 我嘗試過觸發但失敗了。
我嘗試如下
create trigger Person_Trigger Update on person
before update
as
insert into old_person(id, name, modified)
select id, new.name, getdate()
from person
它給了我語法錯誤...也沒有很多觸發器引用,一點推動將非常感激!
看看下面的例子
IO自己有點麻煩,但是從MySQL中如何創建觸發器有一條線讓我思考
我們將發出的第一個MySQL命令有點不尋常:
DELIMITER $$
我們的觸發器主體需要許多用分號(;)分隔的SQL命令。 要創建完整的觸發器代碼,我們必須將分隔符更改為其他內容 - 例如$$。
最后,我們將分隔符設置為分號:
DELIMITER;
因此,在SQL Fiddle中,我將查詢終止符更改為GO
,這似乎是最重要的工作。
CREATE TABLE person
(
id INT,
name varchar(20)
)
GO
CREATE TABLE old_person
(
id INT,
name varchar(20),
modified DATETIME
)
GO
CREATE TRIGGER Person_Trigger before update on person
FOR EACH ROW BEGIN
INSERT INTO old_person(id, name, modified)
VALUES (OLD.id, OLD.name, NOW());
END
GO
INSERT INTO person VALUES (1,'TADA')
GO
UPDATE person SET name = 'FOO'
GO
試試這個:
DELIMITER \\
CREATE TRIGGER `Person_Trigger`
BEFORE UPDATE ON `Person`
FOR EACH ROW
BEGIN
DECLARE date_modified datetime;
SET date_modified = NOW();
INSERT INTO old_person(id, name, modified)
VALUES (OLD.id, OLD.name, date_modified);
END\\
這個語法適用於我自己的項目。 在開始觸發之前,您可能還需要聲明分隔符。 此外,如果你想使用NEW
關鍵字應該是AFTER
更新。 如果要繼續在觸發器上使用BEFORE
更新,請切換到OLD
關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.