How do I specify unique constraint for multiple columns in MySQL?
我有一张桌子。
ZZU1-12308012309型
现在,我想把用户栏、电子邮件栏、地址栏统一起来。
如何在MySQL中执行此操作?
- 当然,这个例子只是…一个例子。所以请不要担心语义学。
.
。
- 这是否适用于insert语句的on-duplicate key子句?也就是说,如果我试图插入的行与另一行的user/email/address值冲突,insert会执行on duplicate key子句指定的操作吗?
- 这样三者的结合会是独一无二的吗?或者所有单独的三列都是唯一的?
- 加里,三者的结合是独一无二的。
- 对我来说很好
- 对于那些使用MySQLWorkbench的人:转到"索引"选项卡并选择"唯一"作为您的类型。为索引命名并检查"索引列"部分下的相应列。
- 伟大的!现在,如果我不知道它的名字,我该怎么办?
- 非常不规则-"从投票中显示索引"将为您提供密钥名称,或者您可以在创建密钥时为其命名。
- 像我一样,如果有人从搜索引擎中找到这个…为了回答clizzin关于复制键是否可以与复合键一起使用的问题,它绝对可以,但是它需要对语法做一些小的调整。参见stackoverflow.com/questions/9537710/…
- 是否有任何查询来获取构成唯一约束的所有列名?对于上面的查询,我想知道,在投票表中,用户、电子邮件、地址一起构成了一个唯一的约束。
- 需要注意的一点是,如果在此之前在user或email或address上定义了任何唯一的索引,则必须删除这些索引,以使此规则适用于ON DUPLICATE KEY UPDATE等情况。
- 如何使它与空值一起工作。如果我们插入两个具有空值的相同行,这将不起作用…
- @wasim-null被认为是"缺少未知值",这意味着mysql不认为两个空值相同。没有办法用一个唯一的索引来强制执行这一点。您可能能够用一个before-insert/before-update触发器来完成它,但不能用一个唯一的索引来完成。
- 喜欢这个例子。我一次又一次地回到这个问题上,不知怎么的,我就是想不起确切的语法,这有很大的帮助!
- 就要推翻答案了…但是有1024张选票…< <
- 对于使用phpmyadmin的用户,请转到表下的"structure"->"+indexes",它也可以从此处更改。
我有一个mysql表:
唯一键工作正常,它允许多个空行的id_box_元素和id_路由器。
我运行的是MySQL5.1.42,所以可能上面讨论的问题有一些更新。幸运的是,它起作用了,希望它能一直这样。
- 我想标记这个答案,因为它确实向您展示了如何创建一个具有唯一索引的新表,正如jonstjohn上面的答案告诉您如何更新现有表。它们也会做同样的事情,不过这取决于您是创建新表还是更新现有表。:)
- 所有的引号都是什么,它们有什么作用吗?
- 它是从adminer(www.adminer.org)输出的,adminer会自动插入这些反引号,因此不会与用作列名的mysql关键字发生冲突。
如果行中有一个空值,那么多列唯一索引在MySQL中不起作用,因为MySQL将空值视为唯一值,并且至少当前没有在多列索引中处理它的逻辑。是的,这种行为是疯狂的,因为它限制了许多合法的多列索引应用,但它就是这样…到目前为止,这是一个已经在mysql bug轨道上标记了"will not fix"的bug…
- 澄清两点:1)这一行为不适用于ENGINE BDB,2)这是记录在案的行为,尽管,imho,由于其令人惊讶/不愉快,没有充分记录。看到mysql bug 25544 bugs.mysql.com/bug.php了吗?ID=25544进行讨论。
- 谢谢你的空脑袋,解决了我的问题…我想我要一个哈希校验和
- 这不是答案。它应该是对原始问题的评论。
- 官方文件说:注意,从MySQL5.1开始,不再支持BDB。
- 很好的信息,但不是答案。只是与问题有关的外围设备。
你试过这个吗?
1
| UNIQUE KEY `thekey` (`user`,`email`,`address`) |
号
- 我试过了,但好像不行。我再试一次。
- 埃里克说的对我来说很好:UNIQUE KEY 键`(user,email,address`。我使用的是MySQL5.5.24版本,如果您使用它,甚至可以在phpmyadmin中设置它。我使用的是PMA的3.5.1版本。
- 用MySQL5.6尝试过。从第一次尝试开始工作。谢谢你,埃里克!
这适用于MySQL5.5.32版本
。
您可以通过phpmyadmin添加多个列唯一索引。(我在4.0.4版中测试过)
导航到目标表的结构页。向其中一列添加唯一索引。展开"结构"页底部的"索引"列表,查看刚刚添加的唯一索引。单击编辑图标,然后在下面的对话框中,可以向该唯一索引添加其他列。
MySQL5或更高版本的行为如下(我刚刚测试过):
- 可以定义涉及可为空列的唯一约束。假设您定义了一个唯一的约束(a,b),其中a不可以为空,b是
- 当计算这样的约束时,您可以根据需要多次使用(空)(相同的值!)
- 您只能有一对(A,而不是空B)
例子:产品名称,产品版本"玻璃",空"玻璃",空"葡萄酒",1
现在,如果您再次尝试插入("wine"1),它将报告违反约束的情况。希望这有帮助
我是这样做的:
。
我对一个独特的index_name的约定是TableName_Column1_Column2_Column3_uindex。
要添加唯一索引,需要以下内容:
1)表名2)索引名称3)要添加索引的列
。
在您的案例中,我们可以创建以下唯一索引:
如果你以后想避免重复的话。创建另一列,比如ID2。
。
现在在两列中添加唯一:
如果要在MySQL中创建表,请使用以下命令: