有点问题。首先,这是我的表结构。
表 doc_perms
id user_id doc_id can_view can_edit can_delete
ID 是 PK,user_id 和 doc_id 是其他表的 FK。
基本上,如果 user_id 和 doc_id 的 INSERT 数据已经存在于一行中,无论其余列如何,我都需要阻止执行 INSERT 查询。
例如
如果你有数据
user_id doc_id
1 1
1 2
然后您尝试使用 user_id = 1 和 doc_id = 2 执行 INSERT,查询失败,因为其中已经有包含该数据的行。
希望这是有道理的。
提前感谢您的帮助。
最佳答案
假设 doc_perms
中没有重复项,您可以 create a unique index在 (user_id, doc_id)
上:
CREATE UNIQUE INDEX doc_perms_index
ON doc_perms (user_id,doc_id)
如果有重复,可以用ALTER IGNORE ... ADD UNIQUE INDEX将删除它们:
ALTER IGNORE TABLE doc_perms
ADD UNIQUE INDEX doc_perms_index (user_id, doc_id)
(在所有共享相同(user_id,doc_id)的行中,除一个行外的所有行将被删除。保留的行未指定。)
创建唯一索引后,如果 (user_id, doc_id)
重复,INSERT INTO doc_perms ...
将引发错误。
如果您希望插入,但在 (user_id, doc_id)
重复时更新其他列,那么(正如@moopet 已经提到的)您可以使用 INSERT ... ON DUPLICATE KEY UPDATE .例如:
INSERT INTO doc_perms (user_id, doc_id, foo)
VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE foo = 3'''
关于mysql - 如果一行已经包含 INSERT 数据,则阻止 MySQL 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108920/