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
- Utworzenie dwóch dodatkowych kolumn z danymi w tabeli docelowej
- Przekopiowanie danych z tabeli z filmami do tabeli z artykułami
- 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
- 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.!!