我尝试为表上的更新创建一个替代触发器。正常使用的替代触发器是视图,但Sqlite手册说,替代触发器对表也有效。但我收到错误:无法在表上创建INSTEAD OF触发器。我想知道为什么。
我使用外键:
PRAGMA foreign_keys = ON;
我有两张桌子。标识符表:
CREATE TABLE id
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
created REAL NOT NULL DEFAULT CURRENT_TIMESTAMP
);
引用标识符的表:
CREATE TABLE person
(
id INTEGER NOT NULL DEFAULT (last_insert_rowid()) REFERENCES id,
login TEXT,
password TEXT,
firstname TEXT,
lastname TEXT,
email TEXT,
created REAL NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, created)
);
插入正常:
INSERT INTO id DEFAULT VALUES;
INSERT INTO person (login) VALUES ('root');
SELECT * FROM person;
1|root|||||2012-02-28 18:03:45
现在我想定义以下触发器,它将更新转换为插入:
CREATE TRIGGER person_update INSTEAD OF UPDATE OF login, password, firstname, lastname, email ON person
BEGIN
INSERT INTO person (login, password, firstname, lastname, email)
VALUES (new.login, new.password, new.firstname, new.lastname, new.email);
END;
但它因上述错误而失败,我不明白为什么。
答案 0 :(得分:9)
我尝试浏览the source code(搜索“无法创建INSTEAD OF”),尽管在评论中读取了创建触发器语句的详细概述,但我会说{{1仅适用于视图,不能与表一起使用。
答案 1 :(得分:1)
我希望这只是帖子中的拼写错误,但您的create
声明应为:
INSTEAD OF UPDATE ON
你输入了:
INSTEAD OF UPDATE OF
答案 2 :(得分:0)
只需创建一个视图person_view as select * from person
并将触发器指向它。