我有一张桌子:
table votes ( id, user, email, address, primary key(id), );
现在我想使列用户,电子邮件,地址唯一(一起).
我如何在MySql中执行此操作?
当然这个例子只是......一个例子.所以请不要担心语义.
jonstjohn.. 1383
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
对于那些使用MySQL工作台的人:转到索引选项卡并选择UNIQUE作为您的类型.为索引命名并检查"索引列"部分下的相应列 (86认同)
这是否适用于INSERT语句的ON DUPLICATE KEY子句?也就是说,如果我试图插入与另一行的用户/电子邮件/地址值冲突的行,INSERT是否会执行ON DUPLICATE KEY子句指定的操作? (31认同)
加里,三人的组合将是独一无二的. (18认同)
像我一样,如果有其他人从搜索引擎中找到这个......并且回答Clizzin关于ON DUPLICATE KEY是否可以使用复合键的问题 - 它绝对会,但是它需要对语法进行一些小的调整.请参阅http://stackoverflow.com/questions/9537710/is-there-a-way-to-use-on-duplicate-key-to-update-all-that-i-wanted-to-insert (9认同)
这样三种组合会是独一无二的吗?或者所有单独的三列都是独一无二的? (4认同)
如何使它即使使用NULL值也能工作。如果我们插入两个具有NULL值的相同行,则此行不起作用... (2认同)
Frodik.. 223
我有一个MySQL表:
CREATE TABLE `content_html` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_box_elements` int(11) DEFAULT NULL, `id_router` int(11) DEFAULT NULL, `content` mediumtext COLLATE utf8_czech_ci NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`) );
并且UNIQUE KEY的工作方式与预期的一样,它允许id_box_elements和id_router的多个NULL行.
我正在运行MySQL 5.1.42,所以可能在上面讨论的问题上有一些更新.幸运的是它有效,希望它能保持这种状态.
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
我有一个MySQL表:
CREATE TABLE `content_html` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_box_elements` int(11) DEFAULT NULL, `id_router` int(11) DEFAULT NULL, `content` mediumtext COLLATE utf8_czech_ci NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`) );
并且UNIQUE KEY的工作方式与预期的一样,它允许id_box_elements和id_router的多个NULL行.
我正在运行MySQL 5.1.42,所以可能在上面讨论的问题上有一些更新.幸运的是它有效,希望它能保持这种状态.
如果行中有NULL值,则多列唯一索引在MySQL中不起作用,因为MySQL将NULL视为唯一值,并且至少当前没有逻辑可以在多列索引中解决它.是的,这种行为是疯狂的,因为它限制了很多合法的多列索引应用程序,但它就是这样......到目前为止,这是一个在MySQL上标记为"无法修复"的错误错误轨道...
你试过这个吗?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
这适用于mysql版本5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
您可以通过phpMyAdmin添加多列唯一索引.(我在4.0.4版本中测试过)
导航到目标表的结构页面.向其中一列添加唯一索引.展开结构页面底部的" 索引"列表,以查看刚刚添加的唯一索引.单击编辑图标,然后在以下对话框中,您可以向该唯一索引添加其他列.
MySql 5或更高版本的行为与此类似(我刚刚测试过):
您可以定义涉及可空列的唯一约束.假设你定义一个唯一的约束(A,B),其中A不可为空而B是
在评估这样的约束时,你可以多次(A,null)(相同的A值!)
你只能有一个(A,非空B)对
示例:PRODUCT_NAME,PRODUCT_VERSION'glass',null'glass',null'wine',1
现在,如果你再次尝试插入('wine'1),它将报告约束违规希望这会有所帮助