user_id
2 つの主キー ( , ) を持つテーブルがあります。テーブルにこれをpost_id
含む行がない場合にのみ行を挿入
し、このキーの以前のデータが存在する場合、その行のみが新しいデータで更新されます。このクエリを作成しました。user id
post id
INSERT INTO trust_list(`user_id`,`post_id`,`post_per`,`comment_per`,`cat_per`)
VALUES (7,1,'000','000','000')
ON DUPLICATE KEY UPDATE `post_per`='000',`comment_per`='000',`cat_per`='000'
たとえば、次の行がテーブルに存在する場合:
- ユーザーID:5
- post_id:1
- post_per:001
- comment_per:111
- cat_per:101
次に、上記のクエリを実行すると、mysql はこの行を更新しますが、post_id
この行が「1」であるという理由だけで、mysql はこの行を更新すべきではありません。何が問題なのかわかりません。
DESC trust_list
上記のクエリの結果は次のとおりです。
Field Type Null Key Default Extra
user_id int(11) NO PRI NULL
post_id int(4) NO PRI NULL
post_per tinytext YES NULL
comment_per tinytext YES NULL
cat_per tinytext YES NULL
=================
すべての友人に感謝しますテーブルを削除して再度作成することにしたとき、このテーブルからエクスポートを取得して.sql
ファイルを確認すると、次のように表示されます。
CREATE TABLE IF NOT EXISTS `trust_list` (
`user_id` int(11) NOT NULL,
`post_id` int(11) NOT NULL,
`post_per` tinytext COLLATE utf8_estonian_ci ,
`comment_per` tinytext COLLATE utf8_estonian_ci ,
`cat_per` tinytext COLLATE utf8_estonian_ci ,
PRIMARY KEY (`idea_id`,`user_id`),
UNIQUE KEY `idea_id` (`idea_id`)
)
どうやら、問題は UNIQUE KEY にあるようです。ファイルから削除し、テーブルを削除してからtrust_list
.sql ファイルをインポートします。これで問題が解決しました。ありがとうございました