Атрибуты столбцов
PRIMARY KEY
Атрибут PRIMARY KEY
задает первичный ключ таблицы.
USE productsdb;
CREATE TABLE Customers
(
Id INT PRIMARY KEY,
Age INT,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
Первичный ключ уникально идентифицирует строку в таблице. В качестве первичного ключа необязательно должны выступать
столбцы с типом int
, они могут представлять любой другой тип.
Установка первичного ключа на уровне таблицы:
USE productsdb;
CREATE TABLE Customers
(
Id INT,
Age INT,
FirstName VARCHAR(20),
LastName VARCHAR(20),
PRIMARY KEY(Id)
);
Первичный ключ может быть составным. Такой ключ использовать сразу несколько столбцов, чтобы уникально идентифицировать строку в таблице:
CREATE TABLE OrderLines
(
OrderId INT,
ProductId INT,
Quantity INT,
Price MONEY,
PRIMARY KEY(OrderId, ProductId)
)
Здесь поля OrderId
и ProductId
вместе выступают как составной первичный ключ. То есть в таблице OrderLines
не может
быть двух строк, где для обоих из этих полей одновременно были бы одни и те же значения.
AUTO_INCREMENT
Атрибут AUTO_INCREMENT
позволяет указать, что значение столбца будет автоматически
увеличиваться при добавлении новой строки. Данный атрибут работает для столбцов, которые представляют целочисленный тип или числа с плавающей точкой.
CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Age INT,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
В данном случае значение столбца Id
каждой новой добавленной строки будет увеличиваться на единицу.
UNIQUE
Атрибут UNIQUE
указывает, что столбец может хранить только уникальные значения.
CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Age INT,
FirstName VARCHAR(20),
LastName VARCHAR(20),
Phone VARCHAR(13) UNIQUE
);
В данном случае столбец Phone, который представляет телефон клиента, может хранить только уникальные значения. И мы не сможем добавить в таблицу две строки, у которых значения для этого столбца будет совпадать.
Также мы можем определить этот атрибут на уровне таблицы:
CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Age INT,
FirstName VARCHAR(20),
LastName VARCHAR(20),
Email VARCHAR(30),
Phone VARCHAR(20),
UNIQUE(Email, Phone)
);
NULL и NOT NULL
Чтобы указать, может ли столбец принимать значение NULL
, при определении столбца ему можно
задать атрибут NULL
или NOT NULL
. Если этот атрибут явным образом не будет
использован, то по умолчанию столбец будет допускать значение NULL
. Исключением является тот случай, когда столбец выступает в роли первичного ключа - в
этом случае по умолчанию столбец имеет значение NOT NULL
.
CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Age INT,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL,
Email VARCHAR(30) NULL,
Phone VARCHAR(20) NULL
);
В данном случае столбец Age по умолчанию будет иметь атрибут NULL
.
DEFAULT
Атрибут DEFAULT
определяет значение по умолчанию для столбца. Если при добавлении данных для
столбца не будет предусмотрено значение, то для него будет использоваться значение по умолчанию.
CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Age INT DEFAULT 18,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL,
Email VARCHAR(30) NOT NULL UNIQUE,
Phone VARCHAR(20) NOT NULL UNIQUE
);
Здесь столбец Age
в качестве значения по умолчанию имеет число 18.
CHECK
Атрибут CHECK
задает ограничение для диапазона значений, которые могут храниться в столбце.
Для этого после CHECK указывается в скобках условие, которому должен соответствовать столбец или несколько столбцов. Например, возраст
клиентов не может быть меньше 0 или больше 100:
CREATE TABLE Customers
(
Id INT AUTO_INCREMENT,
Age INT DEFAULT 18 CHECK(Age >0 AND Age < 100), FirstName VARCHAR(20) NOT NULL, LastName VARCHAR(20) NOT NULL, Email
VARCHAR(30) CHECK(Email !='' ), Phone VARCHAR(20) CHECK(Phone !='' ) );
Кроме проверки возраста здесь также проверяется, что столбцы Email и Phone не могут иметь пустую строку в качестве
значения (пустая строка не эквивалентна значению NULL
).
Для соединения условий используется ключевое слово AND
. Условия можно задать в виде операций
сравнения больше (>), меньше (<), не равно (!=).
Также CHECK можно использовать на уровне таблицы:
CREATE TABLE Customers
(
Id INT AUTO_INCREMENT,
Age INT DEFAULT 18,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL,
Email VARCHAR(30),
Phone VARCHAR(20),
CHECK((Age >0 AND Age<100) AND (Email !='' ) AND (Phone !='' )) );
Оператор CONSTRAINT. Установка имени ограничений
С помощью ключевого слова CONSTRAINT
можно задать имя для ограничений. Они указываются после
ключевого слова CONSTRAINT
перед атрибутами на уровне таблицы:
CREATE TABLE Customers
(
Id INT AUTO_INCREMENT,
Age INT,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL,
Email VARCHAR(30),
Phone VARCHAR(20) NOT NULL,
CONSTRAINT customers_pk PRIMARY KEY(Id),
CONSTRAINT customer_phone_uq UNIQUE(Phone),
CONSTRAINT customer_age_chk CHECK(Age >0 AND Age<100) );
В данном случае ограничение для PRIMARY KEY
называется customers_pk
, для UNIQUE
- customer_phone_uq
, а для CHECK
-
customer_age_chk
. Смысл установки имен ограничений заключается в том, что впоследствии через эти имена мы сможем управлять ограничениями - удалять или изменять их.
Установить имя можно для ограничений PRIMARY KEY
, CHECK
, UNIQUE
, а также FOREIGN KEY
, который рассматриватся далее.