Mysql
 sql >> база данни >  >> RDS >> Mysql

Копиране на ред, но с нов идентификатор

Да кажем, че вашата таблица има следните полета:

( pk_id int not null auto_increment primary key,
  col1 int,
  col2 varchar(10)
)

след това, за да копирате стойности от един ред в другия ред с нова стойност на ключа, следната заявка може да помогне

insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

Това ще генерира нова стойност за pk_id поле и копирайте стойности от col1 и col2 от избрания ред.

Можете да разширите тази извадка, за да кандидатствате за повече полета в таблицата.

АКТУАЛИЗИРАНЕ :
С уважение към коментарите на JohnP и Martin -

Можем да използваме временна таблица, за да буферираме първо от основната таблица и да я използваме, за да копираме отново в основната таблица. Простото актуализиране на полето за pk референтна таблица във временната таблица няма да помогне, тъй като може вече да присъства в основната таблица. Вместо това можем да изхвърлим полето pk от временната таблица и да копираме всички останали в основната таблица.

С позоваване на отговора от Тим Рюсен в препоръчаната публикация :

CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;

Надявам се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli_stmt::bind_param() [mysqli-stmt.bind-param]:Броят на променливите не съвпада с броя на параметрите

  2. ПРИ ДУБЛИРАНЕ НА КЛЮЧ + АВТОМАТИЧНО НАРАЩАНЕ проблем mysql

  3. Какво е MySQL? – Въведение в системите за управление на бази данни

  4. MySQL - Уникален външен ключ

  5. Индексът (на база нула) трябва да е по-голям или равен на нула