簡體   English   中英

在更新時創建觸發器以將舊值插入到MYSQL中的其他表中

[英]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

它給了我語法錯誤...也沒有很多觸發器引用,一點推動將非常感激!

看看下面的例子

SQL Fiddle DEMO

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM