我想创建一个类似于这个的SQLite 触发器:
CREATE TRIGGER "prevent_duplicate_emails"
BEFORE INSERT OF "email" ON "users"
FOR EACH ROW
BEGIN
SELECT COUNT("email") FROM "users" WHERE "email" LIKE NEW."email"
# FIX ME!
IF COUNT("email") > 0:
RAISE ABORT|FAIL, NEW."email" || ' already exists'
ELSE:
INSERT INTO "unique_emails" VALUES (NEW."email");
ENDIF;
END;
所以基本上当我这样做时:
INSERT INTO "users" ("email") VALUES ("adam@eden.com"); # WORKS
INSERT INTO "users" ("email") VALUES ("adam@eden.com"); # FAILS
INSERT INTO "users" ("email") VALUES ("eve@eden.com"); # WORKS
第一个INSERT
将产生两条新记录(在表users
和中unique_emails
),而第二个INSERT
将失败并且根本不产生任何记录。是否可以从触发器中执行此操作?
我阅读了文档,但除了不完全理解之外,RAISE
我看不到实现这一目标的方法。
PS:我知道我可以采取其他几种方法来获取唯一电子邮件列表,但这不是这个问题的重点。如果我可以从触发器中执行此检查/中止,这将真正简化事情。