[MYSQL] Kopiowanie danych z tabeli do tabeli

W artykule tym przedstawię, w jaki sposób za pomocą komend MYSQL’a przekopiować dane z jednej tabeli do drugiej tabeli. Zrobimy też kopiowanie danych z dwóch kolumn do jednej.

Thank you for reading this post, don't forget to subscribe!

Ostatnio wyznaczyłem sobie kolejny projekt zmian w moim pierwszym, najstarszym serwisie jaki stworzyłem czyli na kosmosnews.pl. Jako, że projektując ten serwis tak naprawdę uczyłem się dopiero programowania (wraz z książką “PHP i MySQL Tworzenie stron Vademecum profesjonalisty”) nie jest ona idealna:). Projekt ten zakłada rezygnacje z tabeli, która zawiera dane o filmach dodanych przez użytkowników i przeniesienie jej do tabeli z artykułami. Aby to wykonać określiłem sobie następujące zadania

  1. Utworzenie dwóch dodatkowych kolumn z danymi w tabeli docelowej
  2. Przekopiowanie danych z tabeli z filmami do tabeli z artykułami
  3. W jednym przypadku połączenie danych z dwóch kolumn z tabeli z filmami i zapisanie ich do jednej kolumny w tabeli z artykułami
  4. Usunięcie zbędnej tabeli z filmami

Zanim przejdziemy do realizacji tych zadań przedstawię jak przykładowo wyglądają dane w obu tabelach, oraz jaki będzie wynik naszej pracy:

Tabela: artykuly

 
+------+--------------+---------------+
|  id  |  a_title     | a_description |
+------+--------------+---------------+
|   1  | Kosmiczny_1  | Jakis opis    |
|   3  | Kosmiczny_2  | Jakis opis    |
|   4  | Kosmiczny_3  | Jakis opis    |
+------+--------------+---------------+

Tabela: filmy

+--------+------------+---------------------+------------+
|  m_id  | m_title    | m_content           |m_link      |
+--------+------------+---------------------+------------+
|   1    | tytul_1    | Kwiat pustyni i..   | xaswdfsfd  |
|   3    | tytul_2    | Rodzyn z bazie..    | gfgdgdeer  |
|   4    | tytul_3    | Bem afleck...       | vccverwee  |
+--------+------------+---------------------+------------+
 

Wynik, który osiągniemy:
Tabela: artykuly

+--------+------------+-------------------+-------------+--------+
|  id  | a_title      | a_description     | a_name      | a_type |
+--------+------------+-------------------+-------------+--------+
|   1  | Kosmiczny_1  | Jakis opis        |             |   A    |
|   3  | Kosmiczny_2  | Jakis opis        |             |   A    |
|   4  | Kosmiczny_3  | Jakis opis        |             |   A    |
|   5  | tytul_1      | Kwiat pustyni i.. | 1_xaswdfsfd |   F    |
|   6  | tytul_2      | Rodzyn z bazie..  | 3_gfgdgdeer |   F    |
|   7  | tytul_3      | Bem afleck...     | 4_vccverwee |   F    |
+--------+------------+-------------------+-------------+--------+
 

Oczywiście id jest ustawiony na autoincrement. Ok więc do dzieła.

1. Modyfikacja tabeli artykuły poprzez dodanie dwóch dodatkowych kolumn na końcu tabeli w MySQL

Pierwszym naszym zadaniem jest udzielenie odpowiedzi na pytanie: jak dodać kolumny do istniejącej tabeli w MySQL?.
Otóż do modyfikowania struktury już istniejących tabel w MySQL służy instrukcja ALTER TABLE. Jej składnia wygląda mniej więcej tak:

ALTER TABLE nazwa_tabeli 
[ADD|DROP|ALTER|..] nazwa_kolumny ...
 

Jednakże polecam zapoznać się za oficjalną dokumentacją, którą znajdziecie w tym miejscu: ALTER TABLE Syntax

Dzięki dogłębnej analizie dokumentacji wypracowałem sobie odpowiednie zapytanie do bazy, które zrealizuje mi moje zadanie. Oto one:

ALTER TABLE artykuly ADD COLUMN (a_name varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL),
ADD COLUMN (a_type char(1) COLLATE utf8mb4_unicode_ci DEFAULT 'A')

Przy okazji dzięki zapisowi dla kolumny a_type : DEFAULT 'A' dla wszystkich artykułów kolumna a_type przyjęła wartość “A” – co mi akurat odpowiadało. Natomiast ty możesz zapis ten pominąć.

2,3. Przekopiowanie danych z tabeli z filmami do tabeli z artykułami w MySQL

Podczas przegrywania danych z tabeli z filmami do tabeli z artykułami, chcąc łączyć dwie kolumny w tabeli z filmami i zgrać zawartość tych dwóch kolumn do jednej kolumny w tabeli z artykułami muszę to zrobić za jednym zamachem:) Do wykonania tej czynności potrzebujemy zapoznać się z instrukcją INSERT ... SELECT. Jej składnia wygląda w następujący sposób:

INSERT INTO tabela_cel(nazwy_kolumn_po_przecinkach)
SELECT nazwy_kolumn_po_przecinkach FROM tabela_źródło

Tak jak poprzednio zachęcam to zapoznania sie z oficjalna dokumentacją : INSERT … SELECT Syntax

Po zagłębieniu się w dokumentacji wypracowałem taki kod:

INSERT INTO artykuly (a_title, a_description, a_name, a_type ) 
SELECT m_title, m_content, CONCAT(id, "_", m_link), "F" FROM filmy 

Jak łatwo zauważyć pojawiła się nam nowa komenda CONCAT – która pozwoliła nam na połączenie danych z dwóch kolumn w jedną.

Usunięcie zbędnej tabeli z filmami w MySQL

Pozostało nam już tylko jedno zadanie. Usunąć starą, juz nie potrzebną tabelę z naszej bazy danych.
Tu pozwolę sie nie rozpisywać na temat jak się usuwa tabele. Poprostu przedstawiam gotowy kod:)

DROP TABLE filmy

Prawda, że proste.?:)

Podsumowanie

Słowem podsumowania udało nam się dowiedzieć jak za pomocą samego MySQL’a przegrać dane z jednej tabeli do drugiej, jak połączyć dane z dwóch kolumn jednej tabeli i wstawić je do jednej kolumny w drugiej tabeli, jak dodać nowe kolumny w istniejącej tabeli oraz jak usunąć tabelę. Mam nadzieję, że komuś ta wiedza się przyda. Powodzenia.!!