3

このようなMysqlテーブルを取得しました

CREATE  TABLE IF NOT EXISTS tbl_member_doc_read (
`read_id` INTEGER(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT ,
`member_id` INTEGER(10) UNSIGNED NOT NULL ,
`doc_id` INTEGER(10) UNSIGNED NOT NULL ,
`status` INTEGER(1) DEFAULT '0',
FOREIGN KEY (`member_id`) REFERENCES tbl_member(`member_id`),
FOREIGN KEY (`doc_id`) REFERENCES tbl_doc(`doc_id`)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

そのテーブルのデータIDの例を言ってみましょう

read_id  member_id  doc_id  status
 1          1           1       1
 2          1           2       0
 3          2           2       1

組み合わせまたはペア(member_id、doc_id)が存在する場合、そのテーブルに挿入する必要があります。そうでない場合、ステータスが0の場合はステータスを更新します。使用したSQLクエリは次のとおりです

INSERT INTO tbl_member_doc_read (member_id, doc_id, status) VALUES(1,2,1) ON DUPLICATE KEY UPDATE status = VALUES(status) WHERE status = 0;

2 番目の行をデータ 2 1 2 1 で更新する必要があります

そして、これを挿入すると

INSERT INTO tbl_member_doc_read (member_id, doc_id, status) VALUES(2,1,0) ON DUPLICATE KEY UPDATE status = VALUES(status) WHERE status = 0;

データ4 2 1 0を含む新しい行を挿入する必要があります

しかし、私はこれを解決できません。また、innodbエンジンでは、 member_id と doc_id が別のテーブルの主キーを参照しているため、それらは一意であると思います。innodb では、一意のインデックスを作成できません。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

2

ステートメントを機能させるには、2 つの列にキーON DUPLICATE KEY UPDATEを定義する必要があります。unique

CREATE  TABLE IF NOT EXISTS tbl_member_doc_read 
(
`read_id` INTEGER(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT ,
`member_id` INTEGER(10) UNSIGNED NOT NULL ,
`doc_id` INTEGER(10) UNSIGNED NOT NULL ,
`status` INTEGER(1) DEFAULT '0',
FOREIGN KEY (`member_id`) REFERENCES tbl_member(`member_id`),
FOREIGN KEY (`doc_id`) REFERENCES tbl_doc(`doc_id`),
CONSTRAINT tb_uq UNIQUE (member_id, doc_id)
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

WHERE次に、句を削除します

INSERT INTO tbl_member_doc_read (member_id, doc_id, status) 
VALUES(1,2,1) 
ON DUPLICATE KEY UPDATE 
status = VALUES(status)
于 2013-01-31T13:26:18.297 に答える