MySQL - zkopírování záznamu do původní tabulky kopírovaného záznamu

Potrebuji zkopirovat existujici zaznam v tabulce do tabulky ze ktere se zaznam kopiruje. Problem je s id zaznamu, ktery je zaroven primarnim klicem.
Pomoci
Kód: [Vybrat]
insert into tableA  SELECT * FROM tableA where id='34' zaznam vytvorit nelze, protoze id=id zdrojoveho zaznamu (duplicita)

Nasel jsem dve reseni problemu:
1) dynamicky generovat "insert" dotaz s vyctem sloupcu !=id
2) pouziti pomocne tabulky

Obe mi prijdou ponekud neohrabane. Da se pri kopirovani zaznamu pomoci
Kód: [Vybrat]
insert into tableA  SELECT * FROM tableA where id='34' specifikovat "vsechny sloupce, mimo id"?

« Poslední změna: 05. 08. 2020, 18:07:53 od Petr Krčmář »


Re:MYSQL - zkopirovani zaznamu do puvodni tabulky kopirovaneho zaznamu
« Odpověď #1 kdy: 05. 08. 2020, 13:57:07 »
Pokud je id autoincrement pak:
insert into table (<seznam sloupcu bez id>) select <seznam sloupcu bez is> from table where....

Re:MYSQL - zkopirovani zaznamu do puvodni tabulky kopirovaneho zaznamu
« Odpověď #2 kdy: 05. 08. 2020, 14:02:35 »
Pokud je id autoincrement pak:
insert into table (<seznam sloupcu bez id>) select <seznam sloupcu bez is> from table where....

To je presne reseni kde musim generovat jmena sloupcu a nebo ten list udrzovat rucne...

Re:MYSQL - zkopirovani zaznamu do puvodni tabulky kopirovaneho zaznamu
« Odpověď #3 kdy: 05. 08. 2020, 14:25:13 »
To je presne reseni kde musim generovat jmena sloupcu a nebo ten list udrzovat rucne...
Udržovat ten list ručně je správné řešení. Hvězdička je určená pro rychlé psaní ad-hoc dotazů, v aplikaci by se používat neměla. Vždycky byste měl vědět, které přesně sloupce chcete použít.

Re:MYSQL - zkopirovani zaznamu do puvodni tabulky kopirovaneho zaznamu
« Odpověď #4 kdy: 05. 08. 2020, 14:47:27 »
To je presne reseni kde musim generovat jmena sloupcu a nebo ten list udrzovat rucne...
Udržovat ten list ručně je správné řešení. Hvězdička je určená pro rychlé psaní ad-hoc dotazů, v aplikaci by se používat neměla. Vždycky byste měl vědět, které přesně sloupce chcete použít.

V tomle pripade (v kontextu tabulky) skutecne potrebuji vsechny sloupce krom id. Kdyby slo pouzit neco jako * && !=id tak ho pouziji


m-a

Re:MYSQL - zkopirovani zaznamu do puvodni tabulky kopirovaneho zaznamu
« Odpověď #5 kdy: 05. 08. 2020, 15:34:24 »
Mozes pouzit databazu INFORMATION_SCHEMA:

https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html


SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS`
     WHERE `TABLE_SCHEMA` = 'nazovdatabazy'
     AND `TABLE_NAME` = 'tableA'
     AND `COLUMN_NAME` != 'id'


Re:MYSQL - zkopirovani zaznamu do puvodni tabulky kopirovaneho zaznamu
« Odpověď #6 kdy: 05. 08. 2020, 16:20:40 »
Mozes pouzit databazu INFORMATION_SCHEMA:

https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html


SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS`
     WHERE `TABLE_SCHEMA` = 'nazovdatabazy'
     AND `TABLE_NAME` = 'tableA'
     AND `COLUMN_NAME` != 'id'


ja na to sel pomoci describe, ale tohle je rozhodne snazsi. Akorat jak to muzu dostat do seznamu sloupcu pro "SELECT col1,col2..  FROM..." ?

Asi nejjednodušeji se to dá řešit pomocí triggeru:

Kód: [Vybrat]
CREATE TRIGGER tableA_id_increment BEFORE INSERT ON tableA FOR EACH ROW SET new.id=(SELECT max(id) FROM tableA)+1;
Pak už projde:
Kód: [Vybrat]
INSERT INTO tableA (SELECT * FROM tableA);