1

有点问题。首先,这是我的表结构。

表 doc_perms

id    user_id    doc_id   can_view    can_edit    can_delete

ID 是 PK,user_id 和 doc_id 是其他表的 FK。

基本上,我需要的是防止执行 INSERT 查询,如果 user_id 和 doc_id 的 INSERT 数据已经存在于一行中,而不管其余列如何。

例如

如果你有数据

user_id  doc_id
   1        1
   1        2

然后您尝试使用 user_id = 1 和 doc_id = 2 进行 INSERT,查询失败,因为其中已经有一行包含该数据。

希望这是有道理的。

提前感谢您的帮助。

4

2 回答 2

4

假设 中没有重复项doc_perms,您可以在上创建唯一索引(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)的行中,除了一个之外的所有行都将被删除。保留的行未指定。)

创建唯一索引后,如果重复,INSERT INTO doc_perms ...将引发错误。(user_id, doc_id)

如果您希望插入,但 UPDATE 其他列何时(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'''
于 2012-08-24T11:55:11.500 回答
0

您可以使用INSERT ... ON DUPLICATE KEY UPDATE

请参阅此处的 MySQL 手册:http: //dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2012-08-24T11:55:19.907 回答