2

複数のレコードを mysql データベースに追加する必要があります。複数のクエリを試してみましたが、うまく機能しましたが、効率的ではありませんでした。だから私は以下のような1つのクエリだけで試してみました.

INSERT INTO data (block, length, width, rows) VALUES
    ("BlockA", "200", "10", "20"),
    ("BlockB", "330", "8", "24"),
    ("BlockC", "430", "7", "36")
ON DUPLICATE KEY UPDATE 
    block=VALUES(block),
    length=VALUES(length),
    width=VALUES(width),
    rows=VALUES(rows)

ただし、常にテーブルを更新します (列は block_id、block、length、width、rows です)。block_idも追加してクエリを変更する必要があります。block_idは主キーです。どんな助けでも大歓迎です。

4

1 に答える 1

1

問題なくクエリを実行しました。データ テーブルで他のキーが定義されていませんか? また、id フィールドに「自動インクリメント」が設定されていることを確認してください。auto_increment がない場合、クエリは常に既存の行を更新します

** * **更新しました** * ** * ****

すみません、質問を間違えました。はい、auto_increment キーが 1 つだけの場合、キーは auto_increment であるため、クエリは既存の行を更新する代わりに常に新しい行を挿入します (「既存」/重複を検出する唯一の方法は主キーであるため)。挿入クエリで主キーが指定されていません。

達成したいことは異なると思います。すべてのフィールド(つまり、ブロック、フィールド、幅、行)に複合一意キーを設定することをお勧めします

ところで、SQL フィドルを用意しました。 http://sqlfiddle.com/#!2/e7216/1

一意のキーを追加する構文:

CREATE TABLE `data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`block` varchar(10) DEFAULT NULL,
`length` int(11) DEFAULT NULL,
`width` int(11) DEFAULT NULL,
`rows` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniqueme` (`block`,`length`,`width`,`rows`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
于 2013-08-12T09:47:14.160 に答える