MySQL dupliciranje podatkov z INSERT INTO SELECT stavkom
Včasih potrebujemo določeno vsebino v posamezni tabeli podvojiti, naj bo to zaradi testnih razlogov ali zaradi dodatnih podatkov, ki jih potrebujemo in si prihranimo delo z ročnim vnašanjem. Na primer imamo podatke za določeno napravo, sedaj želimo podvojiti te podatke ter jih obenem malce spremeniti.
Pri standardnem uvozu podatkov v posamezno tabelo uporabljamo INSERT INTO stavek. Lahko izberemo med krajšo obliko, kjer naprej navedemo tabelo in nato vse stolpce za katero imamo definirano vrednost in nato posamezne sklope vrednosti, ki jih omejimo z oklepajema, ki jih ločimo z vejicami. Primer:
-
INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES
-
(25, 3, 'jpg', '20535'),
-
(34, 3, 'jpg', '23598'),
-
(35, 2, 'pdf', '412893');
Zaradi preglednosti lahko tudi za vsako vrstico zapišemo oz. defenirano seznam vrednosti, ki jih želimo zapolniti oz. imamo definirane vrednosti:
-
INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES (25, 3, 'jpg', '20535');
-
INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES (34, 3, 'jpg', '23598');
-
INSERT INTO `files` (`file_id`, `file_extension`, `file_size`) VALUES (35, 2, 'pdf', '412893');
Poznamo pa še krajšo verzijo od prve in sicer tako, da ne navedemo seznam stolpcev katere želimo zapolniti pri čemer moramo poskrbeti, da nato zapolnimo vsa polja, ki so defenirana v posamezni tabeli. Primer:
-
INSERT INTO `files` VALUES (25, 3, 'jpg', '20535');
No, vrnimo se k prvotni problematiki in sicer kopiranju vsebine v posamezni tabeli s pomočjo SELECT stavka. Preprost primer:
-
INSERT INTO ecards (`id`, `category_id`, `name` `hidden`, `created`, `modified`) SELECT NULL, category_id, name, hidden, NOW(), NOW() FROM `table` WHERE smt='tst'
Null vrednost uporabimo za ID, s tem povzročimo auto-increment na primarnem ključu. Za ne-primarne ključe, kjer želimo za vsako vrstico povečati ID pa lahko uporabimo dodatno spremenljivko. Primer:
-
SELECT @row_id := (SELECT MAX(id) FROM `table`);
-
INSERT INTO `table1` (SELECT @row_id := @row_id + 1, drugi_stolpec, tretji_stolpec FROM `table1`)
Dodatno lahko izvajamo tudi pod-izvedbe znotraj same izvedbe, primer:
-
INSERT INTO ecards SELECT
-
NULL, (SELECT category_id FROM categories AS t1 WHERE smt='test' AND t1.name=(SELECT name FROM ategories AS t2 WHERE t2.category_id=ecards.category_id )), ecards.name, ecards.file, ecards.hidden, NOW(), NOW() FROM `ecards` WHERE ecards.polje='nekaj'
Z zgornjo poizvedbo pri kopiranju samih podatkov tudi pridobimo pravi ID kategorije, ki se razlikuje za posamezne sklope. Ker ima vsak posamezen sklop svoje kategorije moramo pri kreiranju podvojenega sklopa popraviti tudi id-je, ki kažejo na kopirane kategorije. Zato naredimo dve pod poizvedbe, kjer id kategorije dobimo preko imena trenutne kategorije.
Dodatne informacije:
- Kreiranje tabele oz. strukture tabele s pomočjo SELECT stavka
- MySQL manual na duplicirianje vsebine s pomočjo SELECT stavka
Delodajalec: KMAG d.d.
Podobni članki:
- MySQL kreiranje tabele s SELECT stavkom
- Hitri vnos/uvoz podatkov v MySQL preko LOAD DATA INFILE
- Select – dropdown – width – internet explorer
- Operacije nad seznami – Javascript DOM – HTML select – HTML option
- Pretvorba PHP MySQL aplikacije v PHP MS SQL aplikacijo (apache, php, mdb2, mysql => iis, php, mdb2, mssql)
- MySQL število vseh najdenih vrstic
- Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like
- AJAX iskanje in dodajanje v seznam (select) z dodatnimi informacijami
- MySQL iskanje LIKE vs FULL-TEXT
- MySQL – date funkcije – current date, now, add date, sub date, interval


