SQL: Tworzenie | CREATE
Stworzymy sobie bazę danych. Dokładnie tę, którą zamodelowaliśmy w poprzednim temacie. Czas urzeczywistnić diagram ERD.
Stworzymy bazę danych znaną ze stworzonego w poprzednim temacie diagramu ERD – rezerwacje lotnicze.
Logowanie do konsoli MySQL
Aby uruchomić konsolę MySQL wprowadzamy w wierszu poleceń (CMD) następującą ścieżkę:
C:\xampp\mysql\bin>
Przy czym C:\xampp to domyślna ścieżka instalacyjna pakietu XAMPP.
Po wejściu w odpowiednią ścieżkę uruchamiamy konsolę MySQL i logujemy się lokalnie wykorzystując polecenie:
mysql -u username -p
gdzie po -u podajemy nazwę użytkownika, a po -p hasło. Bądź zdalnie podając dodatkowo adres hosta.
mysql -h localhost -u username -p
Tworzenie bazy danych
Po zalogowaniu się tworzymy nową bazę danych.
CREATE DATABASE nazwa_bazy;
Możemy również jednocześnie ustawić kodowanie znaków dla naszej bazy na UTF8 (utf8_general_ci, utf8_polish_ci), by poprawnie zapisywały się polskie znaki.
CREATE DATABASE nazwa_bazy DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Stwórzmy zatem naszą bazę:
CREATE DATABASE rezerwacje_lotnicze DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Aby wyświetlić aktualną listę dostępnych baz danych wykorzystamy polecenie:
SHOW DATABASES;
Aby rozpocząć działania na naszej bazie wybierzmy ją:
USE rezerwacje_lotnicze;
W każdej chwili możemy sprawdzić, na jakiej bazie aktualnie pracujemy:
SELECT database();
Możemy również wyświetlić jakie tabele zawiera nasza baza.
SHOW TABLES;
Póki co efektem naszego polecenia pokazującego tabele w bazie będzie zbiór pusty
Empty set (0.00 sec)
Tworzenie tabel
Utwórzmy zatem pierwszą tabelę. Wykorzystamy do tego polecenie CREATE TABLE, w którym podamy wszystkie pola, ich nazwy, typ, dodatkowe właściwości. Tabele tworzymy od najbardziej ‘brzegowych’ na naszym diagranmie ERD, czyli takich, od których nie ma już dalszych powiązań (nie zawierają kluczy obcych). W przypadku rozrysowania struktury naszej bazy w postaci drzewa rozpoczynalibyśmy od liści i podążali wgłąb, docierając do korzenia, który utworzymy na końcu (tabela rezerwacja).
CREATE TABLE adres( id int NOT NULL AUTO_INCREMENT, wojewodztwo varchar(45) NOT NULL, powiat varchar(45) NOT NULL, miejscowosc varchar(45) NOT NULL, ulica varchar(45) NOT NULL, numer_domu varchar(45) NOT NULL, numer_lokalu varchar(45), PRIMARY KEY (id) );
Nasza pierwsza tabela to tabela adres. Do nazwenictwa tabel starajmy używać się jedynie małych liter. Do tego nie może być w nazwach spacji, nie zaczynamy nazw od cyfry, nie używamy również polskich znaków.
Tabela zawiera pole id będące kluczem głównym (PRIMARY KEY), liczbą całkowitą (INT), nie może być puste (NOT NULL) oraz jest automatycznie numerowane podczas dodawania kolejnych rekordów (AUTO_INCREMENT). Pozostałe pola będą zwierały informacje tekstowe (VARCHAR) o długości do 45 znaków.
Sprawdźmy teraz jakie tabele zawiera nasza baza danych.
SHOW TABLES; +-------------------------------+ | Tables_in_rezerwacje_lotnicze | +-------------------------------+ | adres | +-------------------------------+
Zobaczmy również jak zbudowana jest nasza tabela adres
DESCRIBE adres; +--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | wojewodztwo | varchar(45) | NO | | NULL | | | powiat | varchar(45) | NO | | NULL | | | miejscowosc | varchar(45) | NO | | NULL | | | ulica | varchar(45) | NO | | NULL | | | numer_domu | varchar(45) | NO | | NULL | | | numer_lokalu | varchar(45) | YES | | NULL | | +--------------+-------------+------+-----+---------+----------------+ 7 rows in set (0.01 sec)
Stwórzmy kolejne tabele. Część z nich będzie zawierała klucze obce, będące odnośnikami do kluczy głównych innych tabel.
CREATE TABLE pasazer( id int NOT NULL AUTO_INCREMENT, imie varchar(45) NOT NULL, nazwisko varchar(45) NOT NULL, pesel varchar(45) NOT NULL, telefon varchar(45) NOT NULL, mail varchar(45) NOT NULL, adres_id int, PRIMARY KEY (id), FOREIGN KEY (adres_id) REFERENCES adres(id) );
Odpowiada za to linia FOREIGN KEY (adres_id) REFERENCES adres(id). Utworzone pole adres_id tabeli pasazer odpowiada polu id tabeli adres.
CREATE TABLE rezerwacja( id int NOT NULL AUTO_INCREMENT, numer_siedzenia int NOT NULL, bagaz varchar(45) NOT NULL, pasazer_id int, lot_numer_lotu int, status_rezerwacji_id int, PRIMARY KEY (id), FOREIGN KEY (pasazer_id) REFERENCES pasazer(id), FOREIGN KEY (lot_numer_lotu) REFERENCES lot(numer_lotu), FOREIGN KEY (status_rezerwacji_id) REFERENCES status_rezerwacji(id) );
Tabela rezerwacja zawiera kilka kluczy obcych.
SHOW TABLES; +-------------------------------+ | Tables_in_rezerwacje_lotnicze | +-------------------------------+ | adres | | lot | | pasazer | | rezerwacja | | samolot | | status_rezerwacji | +-------------------------------+
W ten oto sposób utworzymy wszystkie tabele naszej bazy.