2

Мне нужно добавить несколько записей в базу данных 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_id. block_id является основным ключом. Любая помощь будет оценена по достоинству.

+0

Что ключи таблицы «данными»? – DavidLin

+0

сообщение обновлено (block_id - это первичный ключ) – Irawana

+0

Я выполнил ваш запрос без каких-либо проблем, вы уверены, что у вас нет других ключей, определенных в таблице данных? А также убедитесь, что у вас есть «auto increment», установленный для поля id – DavidLin

ответ

1

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

** * ** ОБНОВЛЕНО ** * ** * ****

К сожалению я вы ошибаетесь. Да, только с одним ключом auto_increment, запрос всегда будет вставлять новые строки вместо обновления существующего (поскольку первичный ключ является единственным способом обнаружения «существующего»/дублирования), поскольку ключ является 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; 
+0

block_id - единственный идентификатор. Также его автоматическое увеличение. Когда я снова запускаю этот запрос, он снова добавляет эти данные вместо обновления. – Irawana

Смежные вопросы