使用所有非唯一列(仅限MySQL)防止重复行?

时间:2010-06-02 21:37:10

标签: mysql database

如何防止在包含两列的表中创建重复行,这两列都不是唯一的?这可以仅使用MySQL来完成,还是需要使用我的PHP脚本进行检查?

以下是相关表的CREATE查询(另外两个表,usersroles):

CREATE TABLE users_roles (
user_id INT(100) NOT NULL,
role_id INT(100) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (role_id) REFERENCES roles(role_id)
) ENGINE = INNODB;

如果执行多次,我希望以下查询抛出错误:

INSERT INTO users_roles (user_id, role_id) VALUES (1, 2);

请不要推荐使用位掩码作为答案。

谢谢!

3 个答案:

答案 0 :(得分:5)

如果不更改键定义的内容,可以添加约束

ALTER TABLE users_roles ADD CONSTRAINT UNIQUE (user_id, role_id);

答案 1 :(得分:4)

user_idrole_id列定义为表格的主键。

CREATE TABLE users_roles (
  user_id INT(100) NOT NULL,
  role_id INT(100) NOT NULL,
  PRIMARY KEY(user_id, role_id)
  FOREIGN KEY (user_id) REFERENCES users(user_id),
  FOREIGN KEY (role_id) REFERENCES roles(role_id)
) ENGINE = INNODB;

Key使用两个或更多列时称为复合,如本例所示。

如果已定义主键,则需要查看使用唯一约束/索引。

答案 2 :(得分:0)

大学毕业后,一位数据库教授告诉我:“每张桌子都必须有一把钥匙”

ALTER TABLE users_roles ADD PRIMARY KEY (user_id, role_id);