我为包含员工帐户详细信息的表创建了一个唯一约束,以试图停止重复的数据插入。
ALTER TABLE emp ADD CONSTRAINT uq_ UNIQUE (USERNAME, EMP_NAME);
但是,当插入测试数据时,我的问题就来了:
----this first insert should work fine
INSERT INTO table_name (id, username, emp_name, regdate)
VALUES (1, 'test', 'test1', sysdate);
我要防止的是这样的实例,即有关员工的数据被两次插入表中:
INSERT INTO table_name (id, username, emp_name, regdate)
VALUES (2, 'test', 'test2', sysdate);
目前,插入运行并添加到我试图阻止它执行的表中。
有没有办法解决这个问题,触发器是更好的选择吗?
在您的表上创建适当的唯一约束将防止指定列之间的重复。
您对约束的命名对于表本身应该是唯一的。数据库的所有约束都列在 pg_constraint 表下。
您可以在网上找到很多关于标准化 SQL 命名格式的文档。
要同时检查 USERNAME 和 EMP_NAME,您需要为每个单独指定约束。
这将防止员工在同一员工姓名下创建多个用户名。
我发现 PostgreSQL 官方文档超级简洁,写得很好。 https://www.postgresql.org/docs/9.5/static/ddl-constraints.html 只需确保选择了合适的 Postgres 版本。
社区维基答案:
按预期工作:
您创建了一个约束来确保 和 的唯一
username
性。emp_name
然后您插入了具有相同
username
但不同emp_name
值的第二行。