我想在我的MySQL表上添加一个唯一性约束。该表包含四列:
ID | NAME | ADDRESS1 | ADDRESS2
此约束必须检查对于new行,newaddress1
和address2
都未包含在ADDRESS1
或中ADDRESS2
。
例子 :
INSERT INTO MYTABLE (ADDRESS1, ADDRESS2) values ('A', 'B'); -- OK
INSERT INTO MYTABLE (ADDRESS1, ADDRESS2) values ('C', 'D'); -- OK
INSERT INTO MYTABLE (ADDRESS1, ADDRESS2) values ('E', 'A'); -- Fails because A exists in ADDRESS1
INSERT INTO MYTABLE (ADDRESS1, ADDRESS2) values ('D', 'F'); -- Fails because D exists in ADDRESS2
有没有办法定义这样的约束?
您可以通过BEFORE
触发器来做到这一点
CREATE TRIGGER tg_bi_mytable
BEFORE INSERT ON mytable
FOR EACH ROW
SET NEW.address1 = IF(EXISTS
(
SELECT *
FROM mytable
WHERE address1 IN(NEW.address1, NEW.address2)
OR address2 IN(NEW.address1, NEW.address2)
), NULL, NEW.address1);
注意: 由于您使用的MySQL版本缺少SIGNAL
技巧NOT NULL
,因此当找到具有相同地址的行时,违反对其中一列的约束。
这是 SQLFiddle
演示。取消注释最后一个插入语句之一,然后单击确定Build Schema
。这些插入不会成功。
问题内容: 我正在JPA中对userid列强制执行唯一性约束检查,这是对user表中的所有记录强制执行的。 我的要求是,特定组织内的用户ID必须唯一,而不是在所有组织中都唯一。 如何执行此类检查? 问题答案: 您可以为唯一约束指定多个字段,请尝试: 通过这样做,您的约束条件将检查userid和Organizationid的组合是否唯一。 最好的祝福,费边
问题内容: 我一直在尝试找出是否有可能对两列的组合具有唯一约束。 具体来说,我有两列A和B。 我有下面这样的行 然后我希望以下组合在插入时失败 我尝试添加一个简单的约束 但这让我在已经存在时插入。 这可能吗?还是在插入之前必须检查组合是否存在? 问题答案: 您可以使用表达式的索引来执行此操作: 我不认为约束允许表达式(并且现在没有方便的Postgres进行测试),但这本质上是同一回事。
本文向大家介绍检查一列以获取MySQL中的唯一值,包括了检查一列以获取MySQL中的唯一值的使用技巧和注意事项,需要的朋友参考一下 您可以为此使用子查询。让我们首先创建一个演示表 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 输出如下 这是检查列唯一值的查询 输出如下
主要内容:在创建表时设置唯一约束,在修改表时添加唯一约束,删除唯一约束MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。 唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但
主要内容:选取设置检查约束的字段,在创建表时设置检查约束,在修改表时添加检查约束,删除检查约束MySQL检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。 在《MySQL默认值》和《MySQL非空约束》中讲解的默认值约束和非空约束也可看作是特殊的检查约束。 选取设置检查约束的字段 检查约束使用 CHECK 关键字,具体的语法格式如下: C
我有一张桌子,不知怎的,同一个人进了我的桌子两次。现在,主键只是一个自动编号,但还有两个字段存在,我想强制它们是唯一的。 例如,这些字段是: 我只想要一张带有唯一PersonNumber和Active=1的唱片 (因此这两个字段的组合必须是唯一的) SQL server中现有表的最佳方式是什么?我可以这样做,如果其他任何人使用与现有值相同的值进行插入,则插入失败,因此我不必在应用程序代码中担心这一