|
|
|
| В цикле копируется множество таблиц
INSERT ... SELECT
Но среди целевых таблиц иногда попадаются уже заполненные имеющие индекс UNIQUE
Хотелось бы чтобы попытка перезаписать уже имеющиеся строки ни к чему не приводила, ни к ошибке ни к перезаписыванию.
Просто процесс копирования пропускал бы их.
Я пробовал использовать ON DUPLICATE KEY UPDATE,
но он хочет, чтобы я что-то сделал, если после этой фразы ничего не писать, то получается ошибка.
Как бы мне при попытке записать строку с повторяющимся ключом, просто не делать этого, а продолжать дальше? | |
|
|
|
|
|
|
|
для: Eugene77
(22.09.2008 в 20:02)
| | 1) указать IGNORE
или
2)
INSERT INTO `tbl`
SELECT
*
FROM `tbl2`
ON DUPLICATE KEY UPDATE ...;
|
| |
|
|
|
|
|
|
|
для: а-я
(22.09.2008 в 22:07)
| | >1) указать IGNORE
Тогда произойдёт копирование,которого я как раз хочу избежать
>или
>2)
>
>INSERT INTO `tbl`
> SELECT
> *
> FROM `tbl2`
>ON DUPLICATE KEY UPDATE ...;
>
|
Вот я так написал:
Request:
INSERT INTO m2.access (num,login,type,forum,access,tmp_period,last_update)
SELECT num,login,type,forum,access,tmp_period,last_update FROM m.access
ON DUPLICATE KEY ...
База ответила мне:
Error: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '...' at line 1 | |
|
|
|
|
|
|
|
для: Eugene77
(23.09.2008 в 14:22)
| | 1) Что-то я Вас не пойму. - Вам как надо?
Если в команде INSERT со строками, имеющими много значений, указывается ключевое слово IGNORE,
то все строки, имеющие дублирующиеся ключи PRIMARY или UNIQUE в этой таблице, будут проигнорированы
и не будут внесены. Если не указывать IGNORE, то данная операция вставки прекращается при обнаружении строки,
имеющей дублирующееся значение существующего ключа. Количество строк, внесенных в данную таблицу,
можно определить при помощи функции C API mysql_info().
|
2) =) вместо "..." надо уазать поля, которые надо обновить! =) если надо конечно) | |
|
|
|
|
|
|
|
для: а-я
(24.09.2008 в 00:35)
| | Мне надо именно то, что вы даёте.
(1-й вариант).
Но проблема в том, что он почему-то не работает.
Какая-то ошибка в синтаксисе выявляется, а я не могу сообразить в чём она.
Я привёл полностью текст запроса, который вроде должен быть правильным, но он не работает.
У вас он работает?
То есть мне надо просто чтобы именно те строки, которые имеют дублирующиеся ключи не вставлялись, а остальные вставлялись. Ничего апдейтить не нужно. | |
|
|
|
|
|
|
|
для: Eugene77
(28.09.2008 в 22:59)
| | >Мне надо именно то, что вы даёте.
>(1-й вариант).
>Но проблема в том, что он почему-то не работает.
>Какая-то ошибка в синтаксисе выявляется, а я не могу сообразить в чём она.
>Я привёл полностью текст запроса, который вроде должен быть правильным, но он не работает.
>У вас он работает?
>То есть мне надо просто чтобы именно те строки, которые имеют дублирующиеся ключи не вставлялись, а остальные вставлялись. Ничего апдейтить не нужно.
Очень много слов. А текста запроса и текста диагностики нет.
А если речь о том, что тут неделю провисело, то может стоит попробовать убрать многоточие из кода? | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 23:40)
| | >А если речь о том, что тут неделю провисело, то может стоит попробовать убрать многоточие из кода?
Я пробовал:
Request:
INSERT INTO m1.access (num,login,type,forum,access,tmp_period,last_update)
SELECT num,login,type,forum,access,tmp_period,last_update FROM m2.access ON DUPLICATE KEY
| Error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''
Ни многоточие, ни его отсутствие не отменяют синтаксической ошибки,
а вариант с IGNORE даёт не тот результат. Мне, наоборот, надо избежать копирования. | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 23:40)
| | >А если речь о том, что тут неделю провисело, то может стоит попробовать убрать многоточие из кода?
А у вас такой запрос без многоточия, или какой-нибудь похожий работает? | |
|
|
|
|
|
|
|
для: Eugene77
(06.10.2008 в 19:11)
| |
INSERT INTO m1.access (num,login,type,forum,access,tmp_period,last_update)
SELECT num,login,type,forum,access,tmp_period,last_update FROM m2.access
ON DUPLICATE KEY SET num=num
|
| |
|
|
|
|
|
|
|
для: Trianon
(06.10.2008 в 20:18)
| | >
INSERT INTO m1.access (num,login,type,forum,access,tmp_period,last_update)
> SELECT num,login,type,forum,access,tmp_period,last_update FROM m2.access
>ON DUPLICATE KEY SET num=num
|
И я так делал всегда, хотя считал, что это не совсем чистый код.
Но в этой ситуации почему-то не прошло даже это: ambigous
Впрочем, действительно, num из какой таблицы в какую приравнивать?
Можно, конечно и добавить названия таблиц, но поскольку запрос формируется всякий раз скриптом, получается сложный код.
Ну что ж, видно ничего не поделать.
Спасибо за советы! | |
|
|
|
|
|
|
|
для: Eugene77
(28.09.2008 в 22:59)
| | Этот код Вы пробовали?
INSERT IGNORE INTO
m2.access (num,login,type,forum,access,tmp_period,last_update)
SELECT
num,login,type,forum,access,tmp_period,last_update
FROM m.access
|
| |
|
|
|
|
автор: hockfan (13.10.2010 в 22:38) |
|
|
для: Eugene77
(22.09.2008 в 20:02)
| | INSERT IGNORE ... SELECT ... | |
|
|
|
|