Database
 sql >> база данни >  >> RDS >> Database

SQL CREATE TABLE за начинаещи

Тази статия съдържа основния 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 кода, който трябва да изпълните, за да създадете такава таблица. Можете да вземете този код и да промените имената на таблици, имената на колони и т.н., за да създадете изцяло нова таблица въз основа на дефиницията на предишната.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OGG-01224 Адресът вече се използва

  2. Тестване на DML изявления за OLTP в паметта

  3. Общи инструкции за изграждане и внедряване на сървър за бази данни

  4. Научете как да обработвате изключения в PL/SQL

  5. SQL МЕЖДУ - интелигентни съвети за сканиране за диапазон от стойности