Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Товарищи, как скопировать запись?
 
 автор: Zilog   (23.12.2010 в 23:45)   письмо автору
 
 

Товарищи, как скопировать запись?
Есть в таблице запись с большой кучей полей.

Нужно создать такую же.

Кроме как руками другого способа не знаю. А вы знаете?

  Ответить  
 
 автор: Trianon   (23.12.2010 в 23:52)   письмо автору
 
   для: Zilog   (23.12.2010 в 23:45)
 

INSERT INTO ... SELECT * FROM ...

  Ответить  
 
 автор: Zilog   (25.12.2010 в 02:09)   письмо автору
 
   для: Trianon   (23.12.2010 в 23:52)
 

Спасибо. Но пока не вышло, пишет: Duplicate entry '676' for key 1
как я понимаю, они копирует так же и первичный ключ, а как бы его пропустить?

ps. Скопировать нужно в ту же таблицу.

  Ответить  
 
 автор: Trianon   (25.12.2010 в 02:24)   письмо автору
 
   для: Zilog   (25.12.2010 в 02:09)
 

Оператор INSERT INTO ... SELECT ... FROM позволяет перечислить как колонки таблицы, которые нужно заполнить, так и поля, из которых нужно взять значения.
Очевидно, Вы не перечислили ни того, ни другого.

  Ответить  
 
 автор: Zilog   (25.12.2010 в 02:33)   письмо автору
 
   для: Trianon   (25.12.2010 в 02:24)
 

так вопрос как в том и был, как создать копию (в ту же таблицу), ничего вручную не перечисляя.

  Ответить  
 
 автор: Trianon   (25.12.2010 в 02:58)   письмо автору
 
   для: Zilog   (25.12.2010 в 02:33)
 

Вы же не сказали, что запись меняться должна.
Раз запись меняется, и копия не чистая, поля придется перечислить.
Вы очень зря считаете поле первичного ключа каким-то особенным.
Оно точно также входит в список полей, как и все остальные.

Кстати, аномально большое количество полей обычно является признаком дефекта при проектировании схемы БД.

  Ответить  
 
 автор: Zilog   (25.12.2010 в 03:07)   письмо автору
 
   для: Trianon   (25.12.2010 в 02:58)
 

>Вы очень зря считаете поле первичного ключа каким-то особенным.
давно подозревал. А как правильно — создать два автоинкремента, второй уже "для себя"?


>Кстати, аномально большое количество полей обычно является признаком дефекта при проектировании схемы БД.

А если таблиц будет аномально много? :)

  Ответить  
 
 автор: lightning.say   (25.12.2010 в 03:08)   письмо автору
 
   для: Zilog   (25.12.2010 в 03:07)
 

INSERT INTO `tablename` SELECT * FROM `tablename2` WHERE id=123456;
только учтите, что UNIQUE значения вылетят с ошибкой при инсерте

  Ответить  
 
 автор: Trianon   (25.12.2010 в 04:34)   письмо автору
 
   для: Zilog   (25.12.2010 в 03:07)
 

>>Вы очень зря считаете поле первичного ключа каким-то особенным.
>давно подозревал. А как правильно — создать два автоинкремента, второй уже "для себя"?

Два автоинкремента Вы создать не сможете. Это механизм исключительно для поддержки первичных ключей.

>
>>Кстати, аномально большое количество полей обычно является признаком дефекта при проектировании схемы БД.
>
>А если таблиц будет аномально много? :)
Если таблиц сильно больше, чем сущностей - тоже признак.

  Ответить  
 
 автор: lightning.say   (25.12.2010 в 03:55)   письмо автору
 
   для: Trianon   (25.12.2010 в 02:58)
 

а где начинается граница аномальности?

  Ответить  
 
 автор: Trianon   (25.12.2010 в 04:31)   письмо автору
 
   для: lightning.say   (25.12.2010 в 03:55)
 

Большое количество полей в таблицах возникает, когда поля пытаются сделать элементами некоторого массива, к примеру (id, name, date, price1, price2, price3)
Хранение массивов "в горизонтальной ориентации" показывает, что таблица денормализована, и является потенциальным признаком , что со схемой, возможно, что-то не то.

  Ответить  
 
 автор: Zilog   (27.12.2010 в 13:11)   письмо автору
 
   для: Trianon   (25.12.2010 в 02:24)
 

Trianon,столкнулся вот с чем.

В мануале написано вот что:

Целевая таблица команды INSERT не должна появляться в утверждении FROM части 
SELECT данного запроса, поскольку в ANSI SQL запрещено производить выборку из той же 
таблицы, в которую производится вставка. (Проблема заключается в том, что операция
 SELECT, возможно, найдет записи, которые были внесены ранее в течение того же самого
 прогона команды. При использовании команд, внутри которых содержатся
 многоступенчатые выборки, можно легко попасть в очень запутанную ситуацию!) 


Возникает вопрос, можно ли всётаки командой insert..select создать новую запись (частичную копию), если речнь идёт об одной и той же таблице (как в моём случае)?!
Вернее насколько корректен такой вариант (на практике он пока работает)?

  Ответить  
 
 автор: Trianon   (27.12.2010 в 13:49)   письмо автору
 
   для: Zilog   (27.12.2010 в 13:11)
 

Можно - в смысле - может получиться. Нельзя - в смысле - безо всяких гарантий
Вариант некорректен, хотя и работает.
На подразумеваемый вопрос тоже могу ответить. Либо молитесь, либо переделывайте.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования