1

少し問題があります。まず、これが私のテーブル構造です。

テーブル 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 を実行しようとすると、そのデータを含む行が既に存在するため、クエリは失敗します。

これが理にかなっていることを願っています。

あらかじめご了承ください。

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) を共有するすべての行のうち、1 つを除くすべての行が削除されます。保持される行は指定されていません。)

一意のインデックスを作成した後、重複しているINSERT INTO doc_perms ...場合はエラーが発生します。(user_id, doc_id)

INSERT したい(user_id, doc_id)が、重複しているときに他の列を UPDATE する場合は、(@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 に答える