如何强制一个新条目只能添加到一个表中,如果它的一个列值存在于另一个表中



我有两个表

  • A: id, email,…(电子邮件可以有副本)
  • B: id, email,…(邮箱唯一)

我想只允许在a中已经存在的电子邮件的B中的新条目

是否有一些方法可以通过fk或我需要某种触发器?

您可以在表B的这个Email列上添加外键约束,以保持它的完整性。

ALTER TABLE B ADD CONSTRAINT fk_email
FOREIGN KEY ( EMAIL ) REFERENCES A ( EMAIL );

唯一的电子邮件应该存储在一个单独的表X:

CREATE TABLE X (email VARCHAR(255) PRIMARY KEY);

,或者更好的:

CREATE TABLE X (id INTEGER PRIMARY KEY, email VARCHAR(255) UNIQUE);

那么,表AB都应该有一个列emailemail_id引用表Xemailid:

CREATE TABLE A (id INTEGER PRIMARY KEY, email VARCHAR(255) REFERENCES X(email));
CREATE TABLE B (id INTEGER PRIMARY KEY, email VARCHAR(255) REFERENCES X(email));

或:

CREATE TABLE A (id INTEGER PRIMARY KEY, email_id INTEGER REFERENCES X(id));
CREATE TABLE B (id INTEGER PRIMARY KEY, email_id INTEGER REFERENCES X(id));

最新更新