Тази статия съдържа основния SQL CREATE TABLE
изрази, които начинаещите могат да използват за създаване на основни таблици за своите проекти за бази данни.
Основен синтаксис
Основният синтаксис за създаване на таблици в SQL е така:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Къде:
TableName
е името, което искате да дадете на масатаColumn1
, etc са имената, които давате на своите колониdatatype
е типът данни, който присвоявате на всяка колона. Повечето RDBMS изискват да присвоите тип данни на всяка колона. В SQLite е по избор.optional_constraints
е незадължителен списък с ограничения, които прилагате към колона.
Обърнете внимание, че повечето СУБД използват по-сложен синтаксис от този (т.е. предлагат повече опции), но това обикновено е основният синтаксис, необходим за създаване на таблица. Повечето начинаещи започват с този синтаксис, след което научават по-разширени опции, докато напредват.
Основен пример
Ето един основен пример:
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL,
OwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL
);
Ето някои точки, които трябва да отбележите:
- Имената на таблици и колони могат да бъдат във всеки случай. Например вместо
PetId
Бих могъл да го нарекаpetid
,PETID
, илиpet_id
. Някои СУБД (напр. Postgres) са чувствителни към малки и големи букви, когато правите заявки за таблици и техните имена на колони, докато други не са (напр. SQL Server). - Някои СУБД използват различни имена за своите типове данни.
NOT NULL
е ограничение на таблицата, което указва, че тази колона трябва да съдържа стойност (т.е. не може да съдържаNULL
стойности).NULL
означава, че колоната може да съдържаNULL
стойности. Някои СУБД (като DB2) не поддържатNULL
ключова дума, така че ще трябва да я пропуснете, когато работите с такива СУБД.PRIMARY KEY
добавя ограничение за първичен ключ към таблицата. Добра практика е да посочите първичен ключ във всичките си таблици.- Ако таблица със същото име вече съществува в базата данни, ще получите грешка. Ще трябва да премахнете съществуващата таблица или да я промените (или да промените името на тази, която създавате).
Създайте таблица с външни ключове
Следващият пример създава таблица с два външни ключа. Външните ключове се използват за създаване на връзка между две таблици.
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL REFERENCES PetTypes (PetTypeId),
OwnerId int NOT NULL REFERENCES Owners (OwnerId),
PetName varchar(60) NOT NULL,
DOB date NULL
);
REFERENCES
клаузата се използва за дефиниране на външен ключ срещу две колони. В нашия случай външните ключове налагат следното:
Pets.PetTypeId
колоната препраща къмPetTypes.PetTypeId
колона (всяка стойност, която влиза вPets.PetTypeId
колоната трябва да има съответстваща стойност вPetTypes.PetTypeId
колона).Pets.OwnerId
колоната препраща къмOwners.OwnerId
колона (всяка стойност, която влиза вPets.OwnerId
колоната трябва да има съответстваща стойност вOwners.OwnerId
колона).
Външните ключове могат да се добавят и по-късно, като се използва ALTER TABLE
изявление, ако е необходимо.
Създайте таблица с ограничение ПО ПОДРАЗБИРАНЕ
Следният пример създава таблица с DEFAULT
ограничение.
CREATE TABLE OrderItems
(
OrderId int NOT NULL PRIMARY KEY,
OrderItem int NOT NULL,
ProductId int NOT NULL,
Quantity int NOT NULL DEFAULT 1,
ItemPrice decimal(8,2) NOT NULL
);
Създайте таблица с колона с времеви печат
Можете да използвате DEFAULT
ограничения за автоматично вмъкване на текущата дата и час в колона всеки път, когато се вмъкне нов ред. Това често се нарича вмъкване на времеви печат.
Различните СУБД използват различни функции за връщане на текущата дата.
Ето пример за това в SQL Server.
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
В SQL Server, CURRENT_TIMESTAMP
е ANSI еквивалент на GETDATE()
функция.
Като алтернатива можете да използвате SYSDATETIME()
за времеви печат с по-висока точност:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
За да се поддържа по-висока прецизност, типът данни на колоната трябва да е datetime2 .
SQL Server има доста типове данни за стойности на дата/час. Вижте функциите за дата и час на SQL Server за списък.
Всяка СУБД има свои собствени функции за връщане на дата и час. Ето списък с основните:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE или NOW() |
Оракул | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL сървър | CURRENT_TIMESTAMP , GETDATE() или SYSDATETIME() |
SQLite | datetime('now') |
Вижте също:
- Функции за дата и час на SQL сървър
- Функции за дата и час в SQLite
Създайте колона с автоматично увеличаваща се стойност
Понякога трябва да създадете колона, която автоматично увеличава стойност, когато се вмъкне нов ред. Те обикновено се наричат „автоматично увеличаване“ или „идентификация“ колони, в зависимост от използваната СУБД.
В SQL Server използвайте IDENTITY
аргумент:
CREATE TABLE Users
(
UserId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
В този случай използваме IDENTITY(1,1)
.
- Първият
1
е семето. Това указва каква стойност да започне броенето (т.е. това е стойността на първия ред, вмъкнат в таблицата). - Вторият
1
е приращението. Това е инкременталната стойност, добавена към стойността на идентичността на предишния зареден ред.
Всяка СУБД има своя собствена ключова дума за създаване на автоматично увеличаваща се колона.
- В MySQL и MariaDb използвайте
AUTO_INCREMENT
- В SQLite имате няколко опции (включително
AUTOINCREMENT
ключова дума) - В PostgreSQL използвайте
SERIAL
- От Oracle Database 12c , вече можете да използвате ключовата дума IDENTITY за създаване на автоматично увеличаващи се колони. Пример може да изглежда така:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Разширени опции
Повечето СУБД ви позволяват да задавате разширени опции при създаване на таблици. Наличните опции ще зависят до голяма степен от вашата СУБД.
Обърнете се към документацията на вашата СУБД, ако имате нужда от опции, които не са посочени в тази статия.
Много разширени опции могат да бъдат зададени чрез GUI (в зависимост от инструмента, който използвате за свързване към вашата база данни). Винаги можете да създадете или модифицирате таблица чрез GUI, след което да използвате нейната опция „Скрипт като създаване“ (или подобна), за да видите SQL кода, който трябва да изпълните, за да създадете такава таблица. Можете да вземете този код и да промените имената на таблици, имената на колони и т.н., за да създадете изцяло нова таблица въз основа на дефиницията на предишната.