是否有可能具有特定列值的mysql唯一索引?

时间:2013-10-12 15:28:20

标签: mysql sql

抱歉这个奇怪的标题,写不出来......

enter image description here

看看上面的图片。

在mysql中,是否有可能/可行的基于user_id的列UNIQUE?

让我重新说一下,是否可以让订单列值仅对特定的user_id唯一?

那么,如果对于user_id = 1 order = 1并且不能有另一个order = 1.但是如果user_id = 2,我可以再次使用order = 1?

或者在与mysql接口的php脚本中控制它更好/更快?

3 个答案:

答案 0 :(得分:2)

你可以使用一个compund索引来对其复合值强制执行唯一性,如下所示:

CREATE UNIQUE INDEX `myUniqueIndex` ON mytable (user_id, order)

任何尝试插入具有重复复合值的行都将返回可以检查

的错误

答案 1 :(得分:2)

你问了几个独立的问题。

(1)是的,您只能为客户提供独特的订单。在这种情况下,您需要使用两列创建唯一索引。

(2)在与mysql接口的php脚本中控制它是否更好/更快?第一个问题与数据完整性而非性能有关。如果这是一个自动增量列,生成新的word_id会更快,因为如果不是,你的PHP代码需要查询数据库以找到最大值并添加一个。

如果您希望每个客户拥有唯一的word_id,则需要在PHP代码中生成这些内容。 MySQL无法根据另一列生成新的自动增量值(因为您使用的是InnoDB)

答案 2 :(得分:0)

在2列上创建唯一的复合键。

ALTER IGNORE TABLE tableName ADD UNIQUE KEY `someName` (user_id, `order`);