MySQL атрибути стовпців і таблиць


За допомогою атрибутів можна налаштувати поведінку стовпців. Розглянемо, які атрибути ми можемо використовувати.


PRIMARY KEY

Атрибут PRIMARY KEY задає первинний ключ таблиці.

USE productsdb;
 
CREATE TABLE Person
(
    Id INT PRIMARY KEY,
    Age INT,
    FirstName VARCHAR(20),
    LastName VARCHAR(20)
);

Первинний ключ унікально ідентифікує рядок в таблиці. В якості первинного ключа необов'язково повинні виступати стовпці з типом int, вони можуть представляти будь-який інший тип.

Установка первинного ключа на рівні таблиці:

USE productsdb;
CREATE TABLE Person
(
    Id INT,
    Age INT,
    FirstName VARCHAR(20),
    LastName VARCHAR(20),
    PRIMARY KEY(Id)
);

Первинний ключ може бути складеним. Такий ключ використовує відразу декілька стовпців, щоб унікально ідентифікувати рядок в таблиці. наприклад:

CREATE TABLE OrderLines
(
    OrderId INT,
    ProductId INT,
    Quantity INT,
    Price decimal(15,2),
    PRIMARY KEY(OrderId, ProductId)
);

Тут поля OrderId і ProductId разом виступають як складовий первинний ключ. Тобто в таблиці OrderLines не може бути двох рядків, де для обох з цих полів одночасно були б одні і ті ж значення.


AUTO_INCREMENT

Атрибут AUTO_INCREMENT дозволяє вказати, що значення стовпця буде автоматично збільшуватися при додаванні нового рядка. Даний атрибут працює для стовпців, які представляють цілочисельний тип або числа з плаваючою крапкою.

CREATE TABLE Person
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    Age INT,
    FirstName VARCHAR(20),
    LastName VARCHAR(20)
);

В даному випадку значення стовпця Id кожного нового доданого рядка буде збільшуватися на одиницю.


UNIQUE

Атрибут UNIQUE вказує, що стовпець може зберігати тільки унікальні значення.

CREATE TABLE Person
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    Age INT,
    FirstName VARCHAR(20),
    LastName VARCHAR(20),
    Phone VARCHAR(13) UNIQUE
);

В даному випадку стовпець Phone , який представляє телефон клієнта, може зберігати тільки унікальні значення. І ми не зможемо додати в таблицю два рядки, у яких значення для цього стовпця буде збігатися.

Також ми можемо визначити цей атрибут на рівні таблиці:

CREATE TABLE Person
(
    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 Person
(
    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 Person
(
    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 Person
(
    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 Person
(
    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 Person
(
    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 , який розглядатиметься далі.


Наш партнер:
beta test mp3 playlist downloader