Tworzenie, usuwanie i modyfikacja tabel w SQL
Dane w typowych bazach danych (np. MySQL, MsSQL) przechowywane są w tak zwanych relacjach czyli inaczej mówiąc tabelach. Tabele oczywiście składają się z wierszy (rekordów) i określonego typu kolumn. W tym artykule zapoznamy się z funkcjami SQL umożliwiającymi tworzenie tabel.
Tworzymy pierwszą tabelę w SQL
Na początek stwórzmy tabelę składającą się z trzech kolumn (jedna kolumna będzie typu int
, druga i trzecia typu varchar
– czyli będzie przystosowana do przechowywania tekstu):
ID | Imie | Nazwisko |
1 | Jan | Kowalski |
2 | Marta | Nowak |
Aby stworzyć powyższą tabelę w SQL musimy skorzystać z funkcji CREATE TABLE
, przykład:
CREATE TABLE nazwaTabeli ( ID INT, Imie VARCHAR(200), Nazwisko VARCHAR(200) );
Powyższy kod stworzył nam tabelę o nazwie nazwaTabeli
. Oczywiście nie zawiera ona żadnych danych.
Ogólna składnia:
CREATE TABLE nazwaTabeli ( nazwaKolumny TypDanych, drugaNazwaKolumny TypDanych -- itd. (możemy mieć dowolną liczbę kolumn) );
Typy danych
Jak pewnie zauważyliście SQL oferuje różne typy przechowywanych danych, w tabeli poniżej zamieszczam te najbardziej popularne:
TYP | Opis |
VARCHAR(200) | Typ tekstowy, w nawiasach podajmy liczbę znaków jakie maksymalnie będzie można zapisać w danej kolumnie (do 8 000) |
INT | Liczba całkowita (od -231 do 231-1) |
FLOAT(2) | Liczby rzeczywiste z określoną w nawiasach dokładnością (1-24 – 7 cyfr, 25-53 – 15 cyfr) |
DATETIME | Data i czas (Format: YYYY-MM-DD HH:mm:SS , Y – Rok, M – Miesiąc, D – Dzień, H – Godzina, m – Minuta, S – sekunda) |
CHAR | Łańcuch znaków o długości do 8000 znaków |
TEXT | Typ tekstowy (maksymalna liczba znaków: 231 – 2 147 483 647) |
MONEY | Typ danych służący do przechowywania wartości pieniężnych (dokładność do jednej dziesięciotysięcznej jednostki, przechowuje liczby z zakresu: od -263 do 263-1 |
Usuwanie tabeli
Tabelę usuwamy stosując instrukcję DROP TABLE
:
DROP TABLE nazwaTabeli;
Modyfikacja utworzonej tabeli
Modyfikując utworzoną już tabelę, musimy zastosować instrukcję ALTER TABLE
. Umożliwia ona między innymi dodanie nowej kolumny, skasowanie już utworzonej kolumny czy też dodać lub usunąć dane ograniczenie.
Dodanie nowej kolumny do już istniejącej tabeli:
ALTER TABLE nazwaTabeli ADD nazwaKolumny VARCHAR(100);
Usunięcie kolumny z istniejącej tabeli:
ALTER TABLE nazwaTabeli DROP COLUMN nazwaKolumny;
Ograniczenia
W tabelach tworzonych w bazach danych można narzucić pewne ograniczenia określające dokładnie strukturę danych jakie mogą zostać zapisane w danej kolumnie.
Zabraniamy wstawianie wartości NULL
(czyli po prostu nie wstawienie niczego):
CREATE TABLE nazwaTabeli ( ID INT NOT NULL, Imie VARCHAR(200), Nazwisko VARCHAR(200) );
Jak widać na powyższym przykładzie robimy to wstawiając po typie danej kolumny klauzulę NOT NULL
.
Można to oczywiście zrobić na utworzonej już tabeli:
ALTER TABLE nazwaTabeli ALTER COLUMN nazwaKolumny VARCHAR(200) NOT NULL;
Aby jawnie zezwolić na wstawianie NULL
można po prostu pominąć słowo NOT
:
ALTER TABLE nazwaTabeli ALTER COLUMN nazwaKolumny VARCHAR(200) NULL;
Klucz podstawowy
Klucz podstawowy w tabelach odgrywa bardzo ważną rolę, bowiem służy do jednoznacznego identyfikowania wierszy (rekordów) w danej tabeli. Logiczne jest zatem to, że dane w tej kolumnie (lub kolumnach) nie mogą się powtarzać (lub nie mogą występować w takim samym układzie wielokrotnie).
Klucz podstawowy to oczywiście zwykła kolumna o jakimś typie danych (najczęściej jest to INT
) zawierająca stosowne ograniczenia (dane muszą być unikalne, czyli nie mogą się powtarzać).
Tworzenie tabeli z kluczem podstawowym:
CREATE TABLE nazwaTabeli ( ID INT PRIMARY KEY, Imie VARCHAR(200), Nazwisko VARCHAR(200) );
Jak widać po typie podajemy informację iż jest to klucz podstawowy – PRIMARY KEY
.
Dodanie klucza podstawowego do istniejącej tabeli:
ALTER TABLE nazwaTabeli ADD CONSTRAINT Klucz PRIMARY KEY(ID);
Automatyczna inkrementacja klucza podstawowego
Dobrze by było, żeby przy wstawianiu nowych danych do tabeli nikt nie myślał, jaką wartość podać dla klucza gdyż ktoś po prostu może nie wiedzieć jakie ID posiada ostatnio dodany rekord. Przydało by się, żeby wartość tej kolumny była automatycznie uzupełniana przez serwer bazodanowy.
MsSQL
W bazie danych firmy Microsoft (MsSQL) auto-inkrementacje uzyskuje się za pomocą komendy IDENTITY
(UWAGA: Dodanie tej własności dla kolumny jest możliwe tylko przy jej tworzeniu, nie ma możliwości zaktualizowania utworzonej już kolumny):
CREATE TABLE tabela ( ID INT IDENTITY (1,1) CONSTRAINT klucz PRIMARY KEY, Imie VARCHAR(200), Nazwisko VARCHAR(200) );
MySQL
W bazie danych MySQL efekt ten uzyskujemy przez zastosowanie komendy AUTO_INCREMENT
:
CREATE TABLE tabela ( id INT NOT NULL AUTO_INCREMENT, Imie Varchar(200), Nazwisko VARCHAR(200), PRIMARY KEY (id) )
Niepowtarzalność danych
Jeżeli zdecydujemy się na używanie jako klucza podstawowego danych, które nie są automatycznie generowane przez serwer bazodanowy musimy oczywiście zagwarantować ich niepowtarzalność (unikalność) tak aby można było jednoznacznie zidentyfikować poszczególnych rekord w tabeli.
W bazach MsSQL oraz MySQL wykonuje się to za pośrednictwem słowa kluczowego UNIQUE
:
CREATE TABLE nazwaTabeli ( ID INT PRIMARY KEY UNIQUE, Imie VARCHAR(200), Nazwisko VARCHAR(200) );
Kurcze, nigdzie nie ma informacji jak to zrobić od początku, czyli co jest potrzebne, jakie oprogramowanie, potem jak stworzyć tabelę a na końcu jak z niej korzystać/modyfikować.
Mam MySQL Workbench ale jak tam wpisuję te komendy to nie mogę ich egzekwować, nie pojawia się żadna tabela, a w tutorialach są same komendy….
Pewnie nie masz zainstalowanej bazy MySQL. MySQL Workbench to narzędzie do zarządzania bazą.
To znaczy zainstalowałem wszystko z takiej stronki i wiem, że na workbenchu się po prostu wpisuje komendy, po instalacji trochę tych elementów było, bo poinstalowałem wszystkie. Kiedyś nadziałem się na fajny kurs, gdzie babeczka tłumaczyła działanie SQL od samego stworzenia bazy, a użytkownik rwzem z nią tworzył to wszystko, tylko za cholerę nie pamiętam co to był za tutorial…