2012-08-24 43 views
1

存在一些問題。首先,這是我的表格結構。防止MySQL插入,如果一行已經包含INSERT數據

表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一個INSERT = 1和DOC_ID = 2,查詢失敗,因爲已經有一個與該數據連續它。

希望這是有道理的。

感謝您提前幫助。

回答

4

假設有在doc_perms沒有重複,你可以create a unique index(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''' 
+0

輝煌。完美工作。謝謝。 – Sinmok

相關問題