Umiejętność tworzenia tabel w SQL
to ważna i fundamentalna koncepcja.
W tym samouczku przeprowadzę Cię przez SQL
składnia CREATE TABLE
instrukcja używająca przykładów kodu zarówno dla PostgreSQL, jak i MySQL.
Podstawowe CREATE TABLE
Składnia
Oto podstawowa składnia CREATE TABLE
oświadczenie:
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
W pierwszej części musisz zacząć od CREATE TABLE
oświadczenie, po którym następuje nazwa tabeli, którą chcesz utworzyć.
Gdybym chciał stworzyć tabelę informacji o nauczycielach, napisałbym coś takiego:
CREATE TABLE teachers();
Wewnątrz nawiasu dodasz informacje dotyczące tworzenia kolumn tabeli. Jeśli zapomnisz nawias, otrzymasz komunikat o błędzie.
CREATE TABLE teachers;
Średnik na końcu nawiasu informuje komputer, że jest to koniec SQL
oświadczenie. Czasami usłyszysz to jako terminator instrukcji.
Co to jest MySQL
silniki pamięci masowej?
Zgodnie z MySQL
dokumentacja:
Silnik pamięci to komponenty MySQL, które obsługują operacje SQL dla różnych typów tabel.
MySQL
używa tych silników pamięci masowej do wykonywania operacji CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) na bazie danych.
W MySQL
, możesz określić typ aparatu magazynu, którego chcesz użyć dla swojej tabeli. Jeśli pominiesz ENGINE
klauzula wtedy domyślną będzie InnoDB.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
)ENGINE=storage_engine;
Co to jest IF NOT EXISTS
klauzula?
Istnieje opcjonalna klauzula o nazwie IF NOT EXISTS
to sprawdzi, czy tabela, którą chcesz utworzyć, już istnieje w bazie danych. Możesz umieścić tę klauzulę tuż przed nazwą tabeli.
CREATE TABLE IF NOT EXISTS teachers();
Jeśli tabela już istnieje, komputer nie utworzy nowej tabeli.
Jeśli pominiesz IF NOT EXISTS
i spróbuj utworzyć tabelę, która już istnieje w bazie danych, wtedy pojawi się komunikat o błędzie.
W tym przykładzie najpierw stworzyłem tabelę o nazwie nauczyciele. Ale jeśli spróbuję utworzyć tę samą tabelę w następnym poleceniu, napotkam błąd.
CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();
Jak tworzyć kolumny w tabeli
Wewnątrz nawiasu CREATE TABLE
oświadczenie, masz zamiar wyświetlić nazwy kolumn, które chcesz utworzyć, wraz z ich typami danych i ograniczeniami.
To jest przykład, jak możemy dodać cztery kolumny school_id
, name
, email
i age
do stołu naszych nauczycieli. Każda nazwa kolumny powinna być oddzielona przecinkami.
CREATE TABLE teachers(
school_id data_type column_constraint,
name data_type column_constraint,
email data_type column_constraint,
age data_type column_constraint
);
Zgodnie z MySQL
dokumentacja:
MySQL ma sztywny limit 4096 kolumn na tabelę, ale efektywne maksimum może być mniejsze dla danej tabeli. Dokładny limit kolumn zależy od kilku czynników.
Jeśli pracujesz na mniejszym MySQL
projektów osobistych, wtedy prawdopodobnie nie będziesz musiał się martwić o przekroczenie liczby kolumn dla swoich tabel.
Zgodnie z dokumentacją PostgreSQL istnieje limit 1600 kolumn na tabelę. Podobne do MySQL
, dokładny limit może się różnić w zależności od miejsca na dysku lub ograniczeń wydajności.
Typy danych w SQL
Kiedy tworzysz kolumny w tabeli, musisz przypisać jej typ danych. Typy danych opisują typ wartości w kolumnach.
Oto sześć popularnych kategorii typów danych w SQL
:
- Numeryczne (int, float, serial, dziesiętne itp.)
- Dane i czas (sygnatura czasowa, data, godzina itp.)
- Znak i ciąg (znak, varchar, tekst itp.)
- Unicode (ntext, nvarchar itp.)
- Binarny (binarny itp.)
- Różne (xml, tabela itp.)
W tym artykule nie omówimy wszystkich typów danych, ale omówimy niektóre z popularnych.
Oto pełna lista PostgreSQL
typy danych i MySQL
typy danych.
Co to jest SERIAL
i AUTO_INCREMENT
?
W PostgreSQL
, SERIAL
typ danych to liczba całkowita, która automatycznie zwiększy się o jeden dla każdego nowego tworzonego wiersza.
Możemy dodać SERIAL
zaraz po school_id
kolumna w naszej tabeli nauczycieli.
school_id SERIAL
W MySQL
, użyjesz AUTO_INCREMENT
zamiast SERIAL
. W tym przykładzie INT
używany jest typ danych, który reprezentuje liczbę całkowitą.
school_id INT AUTO_INCREMENT
Jeśli dodamy pięć wierszy do naszej tabeli nauczycieli, dane wyjściowe pokażą liczby 1, 2, 3, 4, 5 dla school_id
kolumna, ponieważ liczba całkowita automatycznie zwiększa się o jeden dla każdego nowego wiersza.
Co to jest VARCHAR
typ danych?
VARCHAR
typ danych to zmienna długość ciągu, w której można ustawić maksymalną długość znaków.
To jest przykład użycia VARCHAR
typ danych dla name
i email
kolumny w naszej tabeli nauczycieli. Liczba 30 to maksymalna długość znaków.
name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,
Ograniczenia kolumn w SQL
Są to reguły stosowane do danych w kolumnach tabeli.
Oto lista najczęstszych ograniczeń dotyczących kolumn:
- KLUCZ PODSTAWOWY — ten klucz służy jako unikalny identyfikator tabeli
- KLUCZ OBCY — ten klucz zapewnia, że wartości w kolumnie są również obecne w innej tabeli. Służy to jako łącznik między tabelami.
- UNIKALNE — wszystkie wartości w kolumnie muszą być niepowtarzalne
- NOT NULL — wartości nie mogą być NULL. NULL to brak wartości
- SPRAWDZ — testuje wartość względem wyrażenia logicznego
Przykłady PRIMARY
i FOREIGN
klawisze
W naszej tabeli nauczycieli możemy dodać PRIMARY KEY
do school_id
kolumna.
Tak wyglądałby kod w PostgreSQL:
school_id SERIAL PRIMARY KEY
Tak wyglądałby kod w MySQL:
school_id INT AUTO_INCREMENT PRIMARY KEY
Jeśli chcesz mieć więcej niż jedną kolumnę dla PRIMARY KEY
, możesz dodać go zaraz po tworzeniu kolumn.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
PRIMARY KEY (column1, column2)
);
Jeśli chcesz połączyć jedną tabelę z drugą, możesz użyć FOREIGN KEY
.
Załóżmy, że mamy tabelę o nazwie district_employees z kluczem podstawowym district_id
. Oto jak wyglądałby kod w PostgreSQL:
CREATE TABLE district_employees(
district_id SERIAL PRIMARY KEY,
employee_name VARCHAR(30) NOT NULL,
PRIMARY KEY(district_id)
);
W naszej tabeli nauczycieli możemy użyć klucza obcego i odnieść się do tabeli district_employees.
district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
district_id INT REFERENCES district_employees(district_id),
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Przykłady NOT NULL
, CHECK
i UNIQUE
Jeśli chcemy mieć pewność, że nie mamy żadnych wartości, które są null, możemy użyć NOT NULL
ograniczenie.
name VARCHAR(30) NOT NULL
Możemy użyć CHECK
ograniczenie, aby wszyscy nasi nauczyciele mieli ukończone 18 lat. CHECK
ograniczenie testuje wartość względem wyrażenia logicznego.
age INT CHECK(age >= 18)
Jeśli jedna z naszych wartości nie spełnia tego warunku, otrzymamy komunikat o błędzie.
Możemy użyć UNIQUE
ograniczenie, aby upewnić się, że wszystkie e-maile są niepowtarzalne.
email VARCHAR(30) UNIQUE
To jest ostateczny wynik dla tabeli nauczycieli:
Tak wyglądałby kod w PostgreSQL:
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Tak wyglądałby kod w MySQL:
CREATE TABLE teachers(
school_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Mam nadzieję, że podobał Ci się ten artykuł i życzę powodzenia w Twojej podróży z SQL.