使用触发器更改数据库中的记录

时间:2012-11-29 23:08:40

标签: c# database sqlite triggers

这基本上就是我的数据库的样子

ID | descendant | father | mother
---------------------------------
1       X            Y       Z
2       Y            A       B

字母X,Y,Z,A,B代表一些代码或数字

例如,如果我在第1行(ID = 1)中将代码Y更改为R,我想将代码为Y的每个字段更改为代码R,反之亦然,如果我在第2行中将Y更改为R则自动将在第1行中将Y更改为R

最重要的是,如果某些代码被更改为另一个代码,例如我感到悲伤的Y到R或G,那么代码为Y的数据库中的每条记录都应该更改为R或G.

我能用触发器做到这一点吗?或者可以使用其他方式。 (我的用户可以通过我的C#应用​​程序更改记录)

2 个答案:

答案 0 :(得分:1)

像这样使用triggers,每个字段一个:

CREATE TRIGGER update_descendant
AFTER UPDATE OF descendant ON MyTable
BEGIN
    UPDATE MyTable SET descendant = NEW.descendant WHERE descendant = OLD.descendant;
    UPDATE MyTable SET father     = NEW.descendant WHERE father     = OLD.descendant;
    UPDATE MyTable SET mother     = NEW.descendant WHERE mother     = OLD.descendant;
END;

(如果descendant列是唯一的,则无需更新。)

答案 1 :(得分:0)

在此基表上触发,您可能会发生变异。这可能由另一个带有映射的表控制。

与此类似:

map_table
-------------
original_val
new_val

然后你将X填充为原始,将R填入新的,然后就可以使用此插入来修复原始表。