CREATE DATABASE usersdb;
DROP DATABASE usersdb;
CREATE TABLE customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(30),
LastName CHARACTER VARYING(30),
Email CHARACTER VARYING(30),
Age INTEGER
);
DROP TABLE customers;
С помощью выражения PRIMARY KEY
столбец можно сделать первичным ключом.
Первичный ключ уникально идентифицирует строку в таблице.
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(30),
LastName CHARACTER VARYING(30),
Email CHARACTER VARYING(30),
Age INTEGER
)
CREATE TABLE Customers
(
Id SERIAL,
FirstName CHARACTER VARYING(30),
LastName CHARACTER VARYING(30),
Email CHARACTER VARYING(30),
Age INTEGER,
PRIMARY KEY(Id)
);
Таблице OrderLines
не может быть двух строк, где для обоих из этих полей одновременно были бы одни и те же значения.
CREATE TABLE OrderLines
(
OrderId INTEGER,
ProductId INTEGER,
Quantity INTEGER,
Price MONEY,
PRIMARY KEY(OrderId, ProductId)
);
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(20),
LastName CHARACTER VARYING(20),
Email CHARACTER VARYING(30) UNIQUE,
Phone CHARACTER VARYING(30) UNIQUE,
Age INTEGER
);
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(20),
LastName CHARACTER VARYING(20),
Email CHARACTER VARYING(30),
Phone CHARACTER VARYING(30),
Age INTEGER,
UNIQUE(Email, Phone)
);
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(20),
LastName CHARACTER VARYING(20),
Email CHARACTER VARYING(30),
Phone CHARACTER VARYING(30),
Age INTEGER,
UNIQUE(Email),
UNIQUE(Phone)
);
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(20) NOT NULL,
LastName CHARACTER VARYING(20) NOT NULL,
Age INTEGER
);
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(20),
LastName CHARACTER VARYING(20),
Age INTEGER DEFAULT 18
);
Ключевое слово CHECK
задает ограничение для диапазона значений, которые могут храниться в столбце.
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
FirstName CHARACTER VARYING(20),
LastName CHARACTER VARYING(20),
Age INTEGER DEFAULT 18 CHECK(Age > 0 AND Age < 100),
Email CHARACTER VARYING(30) UNIQUE CHECK(Email !=''),
Phone CHARACTER VARYING(20) UNIQUE CHECK(Phone !='')
);
Также с помощью CHECK
можно создать ограничение в целом для таблицы:
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
Age INTEGER DEFAULT 18,
FirstName CHARACTER VARYING(20),
LastName CHARACTER VARYING(20),
Email CHARACTER VARYING(30) UNIQUE,
Phone CHARACTER VARYING(20) UNIQUE,
CHECK((Age >0 AND Age<100) AND (Email !='') AND (Phone !=''))
);
С помощью ключевого слова CONSTRAINT
можно задать имя для ограничений.
В качестве ограничений могут использоваться PRIMARY KEY
, UNIQUE
, CHECK
.
CREATE TABLE Customers
(
Id SERIAL CONSTRAINT customer_Id PRIMARY KEY,
Age INTEGER CONSTRAINT customers_age_check CHECK(Age > 0 AND Age < 100),
FirstName CHARACTER VARYING(20) NOT NULL,
LastName CHARACTER VARYING(20) NOT NULL,
Email CHARACTER VARYING(30) CONSTRAINT customers_email_key UNIQUE,
Phone CHARACTER VARYING(20) CONSTRAINT customers_phone_key UNIQUE
);
CREATE TABLE Customers
(
Id SERIAL,
Age INTEGER,
FirstName CHARACTER VARYING(20) NOT NULL,
LastName CHARACTER VARYING(20) NOT NULL,
Email CHARACTER VARYING(30),
Phone CHARACTER VARYING(20),
CONSTRAINT customer_Id PRIMARY KEY(Id),
CONSTRAINT customers_age_check CHECK(Age > 0 AND Age < 100),
CONSTRAINT customers_email_key UNIQUE(Email),
CONSTRAINT customers_phone_key UNIQUE(Phone)
);
Customers
является главной и представляет клиента.
Orders
является зависимой и представляет заказ, сделанный клиентом.
Эта таблица через столбец CustomerId
связана с таблицей Customers
и ее столбцом Id
.
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
Age INTEGER,
FirstName VARCHAR(20) NOT NULL
);
CREATE TABLE Orders
(
Id SERIAL PRIMARY KEY,
CustomerId INTEGER REFERENCES Customers (Id),
Quantity INTEGER
);
CREATE TABLE Customers
(
Id SERIAL PRIMARY KEY,
Age INTEGER,
FirstName VARCHAR(20) NOT NULL
);
CREATE TABLE Orders
(
Id SERIAL PRIMARY KEY,
CustomerId INTEGER,
Quantity INTEGER,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id)
);
С помощью выражений ON DELETE
и ON UPDATE
можно установить действия, которые выполняются соответственно при удалении
и
изменении связанной строки из главной таблицы.
Опции | Описание |
---|---|
CASCADE |
автоматически удаляет или изменяет строки из зависимой таблицы при удалении или изменении связанных строк в главной таблице. |
RESTRICT |
предотвращает какие-либо действия в зависимой таблице при удалении или изменении связанных строк в главной таблице. То есть фактически какие-либо действия отсутствуют. |
NO ACTION |
действие по умолчанию, предотвращает какие-либо действия в зависимой таблице при удалении или изменении связанных строк в главной таблице. И генерирует ошибку. В отличие от RESTRICT выполняет отложенную проверку на связанность между таблицами. |
SET NULL |
при удалении связанной строки из главной таблицы устанавливает для столбца внешнего ключа значение NULL . |
SET DEFAULT |
при удалении связанной строки из главной таблицы устанавливает для столбца внешнего ключа значение по умолчанию, которое задается с помощью атрибуты DEFAULT . Если для столбца не задано значение по умолчанию, то в качестве него применяется значение NULL . |
CREATE TABLE Orders
(
Id SERIAL PRIMARY KEY,
CustomerId INTEGER,
Quantity INTEGER,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE CASCADE
)
CREATE TABLE Orders
(
Id SERIAL PRIMARY KEY,
CustomerId INTEGER,
Quantity INTEGER,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE SET NULL
);
CREATE TABLE Orders
(
Id SERIAL PRIMARY KEY,
CustomerId INTEGER DEFAULT 1,
Quantity INTEGER,
FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE SET DEFAULT
);
METANIT.COM - Руководство по PostgreSQL