[英]Trigger using old, new table, inserting into two tables
我是在 SQL 中創建觸發器並嘗試使這個觸發器工作(使用 Mysql)的新手。 它應該獲取博客條目的新(更新)版本並將其放入名為 EditedPosts 的表中,而只保留表 Posts 中的原始行不變。
我嘗試了幾種不同的方法,但無法使其正常工作。 有人有什么想法嗎?
我的觸發器:
DELIMITER $$
CREATE TRIGGER editedPost
BEFORE UPDATE on Posts
for each row
begin
insert into editedPosts VALUES (PostID, Titel, Content, Created, UserName, BlogID) FROM new;
insert into Posts VALUES (PostID, Titel, Content, Created, UserName, BlogID) FROM old;
END $$
DELIMITER ;
我的表 帖子:
create table Posts (PostID INTEGER AUTO_INCREMENT not null,
Titel VARCHAR (50) not null,
Content TEXT not null,
Created timestamp DEFAULT current_timestamp,
UserName VARCHAR (50) not null,
BlogID INTEGER not null,
primary key (PostID),
foreign key(UserName) references User_Accounts(UserName),
foreign key (BlogID) REFERENCES Blogs (BlogID));
我的表已編輯帖子:
create table EditedPosts (EPostID INTEGER AUTO_INCREMENT not null,
PostID INTEGER not null,
Titel VARCHAR (50) not null,
Content TEXT not null,
Created timestamp,
Edited timestamp DEFAULT current_timestamp,
UserName VARCHAR (50) not null,
BlogID INTEGER not null,
primary key (EPostID),
foreign key (PostID) REFERENCES Posts(PostID),
foreign key(UserName) references User_Accounts(UserName),
foreign key (BlogID) REFERENCES Blogs (BlogID));
我會說這更常見於update
后觸發器。 但這並沒有什么不同。
無論如何,您根本不需要更新 Posts 中的行。 然后你需要修復你的插入EditedPosts
:
DELIMITER $$
CREATE TRIGGER trg_post_update
BEFORE UPDATE on Posts
for each row
begin
insert into editedPosts (PostID, Titld, Content, Created, UserName, BlogId)
VALUES (new.PostID, new.Title, new.Content, new.Created, new.UserName, new.BlogID);
END $$
DELIMITER ;
實際上,如果您想保留原始值。 . . 而不是更新它們。
我不認為 MySQL 有一個instead of
觸發器。 而且我認為沒有辦法在不產生錯誤的情況下阻止更新。 剩下的就是重新分配值:
DELIMITER $$
CREATE TRIGGER trg_post_update
BEFORE UPDATE on Posts
for each row
begin
insert into editedPosts (PostID, Titld, Content, Created, UserName, BlogId)
VALUES (new.PostID, new.Title, new.Content, new.Created, new.UserName, new.BlogID);
set new.PostID = old.PostId,
new.Title = old.Title,
new.Content = old.Content,
new.Created = old.Created,
new.UserName = old.UserName,
new.BlogID = old.BlogID;
END $$
DELIMITER ;
為此,您確實需要一個before update
觸發器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.