Вставить обновление нескольких строк MySQL

Мне нужно добавить несколько записей в базу данных MySQL. Я пытался с несколькими запросами, и он работает нормально, но не эффективно. Итак, я попробовал это с помощью одного запроса, как показано ниже,

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, lines). Должен ли я внести какие-либо изменения в запрос с добавлением block_id также. block_id является первичным ключом. Любая помощь будет оценена.

1 ответ

Я выполнил ваш запрос без проблем, вы уверены, что у вас нет других ключей, определенных в таблице данных? А также убедитесь, что для поля идентификатора установлено автоматическое увеличение. без auto_increment запрос всегда обновляет существующую строку

** * ** Обновлено ** * ** * ****

Извините, я ошибаюсь ваши вопросы. Да, только с одним ключом auto_increment ваш запрос всегда будет вставлять новые строки вместо обновления существующей (поскольку первичный ключ является единственным способом обнаружения "существующего" / дублирования), поскольку ключом является auto_increment, никогда не будет дублирования, если первичный ключ не указан в запросе вставки.

Я думаю, что вы хотите достичь по-разному, вы можете установить составной уникальный ключ на всех полях (например, блок, поле, ширина, строки)

Кстати, я настроил для вас скрипку SQL. http://sqlfiddle.com/

Синтаксис для добавления уникального ключа:

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;
Другие вопросы по тегам