|
|
|
| Товарищи, как скопировать запись?
Есть в таблице запись с большой кучей полей.
Нужно создать такую же.
Кроме как руками другого способа не знаю. А вы знаете? | |
|
|
|
|
|
|
|
для: Zilog
(23.12.2010 в 23:45)
| |
INSERT INTO ... SELECT * FROM ...
|
| |
|
|
|
|
|
|
|
для: Trianon
(23.12.2010 в 23:52)
| | Спасибо. Но пока не вышло, пишет: Duplicate entry '676' for key 1
как я понимаю, они копирует так же и первичный ключ, а как бы его пропустить?
ps. Скопировать нужно в ту же таблицу. | |
|
|
|
|
|
|
|
для: Zilog
(25.12.2010 в 02:09)
| | Оператор INSERT INTO ... SELECT ... FROM позволяет перечислить как колонки таблицы, которые нужно заполнить, так и поля, из которых нужно взять значения.
Очевидно, Вы не перечислили ни того, ни другого. | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2010 в 02:24)
| | так вопрос как в том и был, как создать копию (в ту же таблицу), ничего вручную не перечисляя. | |
|
|
|
|
|
|
|
для: Zilog
(25.12.2010 в 02:33)
| | Вы же не сказали, что запись меняться должна.
Раз запись меняется, и копия не чистая, поля придется перечислить.
Вы очень зря считаете поле первичного ключа каким-то особенным.
Оно точно также входит в список полей, как и все остальные.
Кстати, аномально большое количество полей обычно является признаком дефекта при проектировании схемы БД. | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2010 в 02:58)
| | >Вы очень зря считаете поле первичного ключа каким-то особенным.
давно подозревал. А как правильно — создать два автоинкремента, второй уже "для себя"?
>Кстати, аномально большое количество полей обычно является признаком дефекта при проектировании схемы БД.
А если таблиц будет аномально много? :) | |
|
|
|
|
|
|
|
для: Zilog
(25.12.2010 в 03:07)
| | INSERT INTO `tablename` SELECT * FROM `tablename2` WHERE id=123456;
только учтите, что UNIQUE значения вылетят с ошибкой при инсерте | |
|
|
|
|
|
|
|
для: Zilog
(25.12.2010 в 03:07)
| | >>Вы очень зря считаете поле первичного ключа каким-то особенным.
>давно подозревал. А как правильно — создать два автоинкремента, второй уже "для себя"?
Два автоинкремента Вы создать не сможете. Это механизм исключительно для поддержки первичных ключей.
>
>>Кстати, аномально большое количество полей обычно является признаком дефекта при проектировании схемы БД.
>
>А если таблиц будет аномально много? :)
Если таблиц сильно больше, чем сущностей - тоже признак. | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2010 в 02:58)
| | а где начинается граница аномальности? | |
|
|
|
|
|
|
|
для: lightning.say
(25.12.2010 в 03:55)
| | Большое количество полей в таблицах возникает, когда поля пытаются сделать элементами некоторого массива, к примеру (id, name, date, price1, price2, price3)
Хранение массивов "в горизонтальной ориентации" показывает, что таблица денормализована, и является потенциальным признаком , что со схемой, возможно, что-то не то. | |
|
|
|
|
|
|
|
для: Trianon
(25.12.2010 в 02:24)
| | Trianon,столкнулся вот с чем.
В мануале написано вот что:
Целевая таблица команды INSERT не должна появляться в утверждении FROM части
SELECT данного запроса, поскольку в ANSI SQL запрещено производить выборку из той же
таблицы, в которую производится вставка. (Проблема заключается в том, что операция
SELECT, возможно, найдет записи, которые были внесены ранее в течение того же самого
прогона команды. При использовании команд, внутри которых содержатся
многоступенчатые выборки, можно легко попасть в очень запутанную ситуацию!)
|
Возникает вопрос, можно ли всётаки командой insert..select создать новую запись (частичную копию), если речнь идёт об одной и той же таблице (как в моём случае)?!
Вернее насколько корректен такой вариант (на практике он пока работает)? | |
|
|
|
|
|
|
|
для: Zilog
(27.12.2010 в 13:11)
| | Можно - в смысле - может получиться. Нельзя - в смысле - безо всяких гарантий
Вариант некорректен, хотя и работает.
На подразумеваемый вопрос тоже могу ответить. Либо молитесь, либо переделывайте. | |
|
|
|