如何防止在包含两列的表中创建重复行,这两列都不是唯一的?这可以仅使用MySQL来完成,还是需要使用我的PHP脚本进行检查?
以下是相关表的CREATE查询(另外两个表,users
和roles
):
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);
请不要推荐使用位掩码作为答案。
谢谢!
答案 0 :(得分:5)
如果不更改键定义的内容,可以添加约束
ALTER TABLE users_roles ADD CONSTRAINT UNIQUE (user_id, role_id);
答案 1 :(得分:4)
将user_id
和role_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);