Да знаете как да създавате таблици в SQL
е важна и фундаментална концепция.
В този урок ще ви преведа през SQL
синтаксис за CREATE TABLE
израз, използващ примери за код за PostgreSQL и MySQL.
Основни CREATE TABLE
Синтаксис
Ето основния синтаксис за CREATE TABLE
изявление:
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
);
За първата част трябва да започнете с CREATE TABLE
оператор, последван от името на таблицата, която искате да създадете.
Ако исках да създам таблица с информация за учители, тогава бих написал нещо подобно:
CREATE TABLE teachers();
В скоби ще добавите информацията за създаване на колоните за таблицата. Ако забравите скобите, ще получите съобщение за грешка.
CREATE TABLE teachers;
Точката и запетаята в края на скобите казва на компютъра, че е краят на SQL
изявление. Понякога ще чуете това да се нарича терминатор на изявление.
Какво представляват MySQL
двигатели за съхранение?
Според MySQL
документация:
Двигателите за съхранение са MySQL компоненти, които обработват SQL операциите за различни типове таблици.
MySQL
използва тези машини за съхранение, за да изпълнява CRUD (създаване, четене, актуализиране и изтриване) операции в базата данни.
В MySQL
, имате опцията да посочите типа машина за съхранение, която искате да използвате за вашата таблица. Ако пропуснете ENGINE
клауза, тогава по подразбиране ще бъде 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;
Какво е IF NOT EXISTS
клауза?
Има незадължителна клауза, наречена IF NOT EXISTS
това ще провери дали таблицата, която искате да създадете, вече съществува в базата данни. Можете да поставите тази клауза точно преди името на таблицата.
CREATE TABLE IF NOT EXISTS teachers();
Ако таблицата вече съществува, тогава компютърът няма да създаде нова таблица.
Ако пропуснете IF NOT EXISTS
клауза и опитайте да създадете таблица, която вече съществува в базата данни, тогава ще получите съобщение за грешка.
В този пример първо създадох таблица, наречена учители. Но ако се опитам да създам същата таблица в следващата команда, ще се сблъскам с грешка.
CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();
Как да създадете колони в таблицата
В скобите за CREATE TABLE
изявление, ще изброите имената на колоните, които искате да създадете, заедно с техните типове данни и ограничения.
Това е пример за това как можем да добавим четири колони от school_id
, name
, email
и age
на масата на нашите учители. Всяко име на колона трябва да бъде разделено със запетаи.
CREATE TABLE teachers(
school_id data_type column_constraint,
name data_type column_constraint,
email data_type column_constraint,
age data_type column_constraint
);
Според MySQL
документация:
MySQL има твърдо ограничение от 4096 колони на таблица, но ефективният максимум може да е по-малък за дадена таблица. Точното ограничение на колоната зависи от няколко фактора.
Ако работите върху по-малък MySQL
лични проекти, тогава вероятно няма да се налага да се притеснявате за превишаване на броя на колоните за вашите таблици.
Според документацията на PostgreSQL има ограничение от 1600 колони на таблица. Подобно на MySQL
, точното ограничение може да варира в зависимост от дисковото пространство или ограниченията на производителността.
Типове данни в SQL
Когато създавате колони в таблицата, трябва да й присвоите тип данни. Типовете данни описват типа стойност вътре в колоните.
Ето шест популярни категории типове данни в SQL
:
- Числови (int, float, сериен, десетичен и др.)
- Данни и време (марка за време, данни, време и т.н.)
- Символ и низ (char, varchar, текст и т.н.)
- Unicode (ntext, nvarchar и др.)
- Двоично (двоично и др.)
- Разни (xml, таблица и др.)
Тази статия няма да премине през всеки отделен тип данни, но ще обхване някои от популярните.
Ето пълния списък на PostgreSQL
типове данни и MySQL
типове данни.
Какво е SERIAL
и AUTO_INCREMENT
?
В PostgreSQL
, SERIAL
Типът данни е цяло число, което автоматично ще се увеличава с едно за всеки нов ред, който се създава.
Можем да добавим SERIAL
веднага след school_id
колона в нашата таблица за учители.
school_id SERIAL
В MySQL
, ще използвате AUTO_INCREMENT
вместо SERIAL
. В този пример, INT
използва се тип данни, който представлява цяло число.
school_id INT AUTO_INCREMENT
Ако добавим пет реда към нашата таблица за учители, изходът ще покаже числата от 1, 2, 3, 4, 5 за school_id
колона, защото цялото число автоматично се увеличава с едно за всеки нов ред.
Какво е VARCHAR
тип данни?
A VARCHAR
Типът данни е променлива дължина на низа, където можете да зададете максимална дължина на символа.
Това е пример за използване на VARCHAR
тип данни за name
и email
колони в нашата таблица за учители. Числото 30 е максималната дължина на знака.
name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,
Ограничения за колони в SQL
Това са правила, които се прилагат към данните в колоните на таблицата.
Ето списък на някои от най-често срещаните ограничения за колони:
- ПЪРВИЧЕН КЛЮЧ – този ключ служи като уникален идентификатор за таблицата
- ВЪНШЕН КЛЮЧ – този ключ гарантира, че стойностите в колона присъстват и в друга таблица. Това служи като връзка между таблиците.
- УНИКАЛНО – всички стойности в колоната трябва да са уникални
- NOT NULL – стойностите не могат да бъдат NULL. NULL е липсата на стойност
- CHECK – тества стойност спрямо булев израз
Примери за PRIMARY
и FOREIGN
ключове
В нашата таблица за учители можем да добавим PRIMARY KEY
към school_id
колона.
Ето как би изглеждал кодът в PostgreSQL:
school_id SERIAL PRIMARY KEY
Ето как би изглеждал кодът в MySQL:
school_id INT AUTO_INCREMENT PRIMARY KEY
Ако искате да имате повече от една колона за PRIMARY KEY
, тогава бихте го добавили веднага след създаването на колони.
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)
);
Ако искате да свържете една таблица с друга, можете да използвате FOREIGN KEY
.
Да приемем, че имаме таблица, наречена district_employees с първичен ключ district_id
. Ето как би изглеждал кодът в PostgreSQL:
CREATE TABLE district_employees(
district_id SERIAL PRIMARY KEY,
employee_name VARCHAR(30) NOT NULL,
PRIMARY KEY(district_id)
);
В нашата таблица за учители можем да използваме външен ключ и да препращаме към таблицата 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
);
Примери за NOT NULL
, CHECK
и UNIQUE
Ако искаме да гарантираме, че нямаме стойности, които са нулеви, можем да използваме NOT NULL
ограничение.
name VARCHAR(30) NOT NULL
Можем да използваме CHECK
ограничение, за да гарантираме, че всички наши учители са на 18 и повече години. CHECK
ограничението тества стойност спрямо булев израз.
age INT CHECK(age >= 18)
Ако една от нашите стойности не отговаря на това условие, ще получим съобщение за грешка.
Можем да използваме UNIQUE
ограничение, за да се уверите, че всички имейли са уникални.
email VARCHAR(30) UNIQUE
Това е крайният резултат за таблицата на учителите:
Ето как би изглеждал кодът в PostgreSQL:
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Ето как би изглеждал кодът в 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)
);
Надявам се, че ви е харесала тази статия и пожелавам успех на вашето SQL пътуване.