Инструкции sql задают следующие ограничение столбца

В этой статье вы поближе познакомитесь с ограничениями в SQL.

Ограничение (constraints) — это ограничение типа значений, которое накладывается на один или несколько столбцов таблицы. Это позволяет поддерживать точность и целостность данных в таблице БД.

В SQL существует несколько различных типов ограничений, в том числе:

  • NOT NULL
  • PRIMARY KEY
  • UNIQUE
  • DEFAULT
  • FOREIGN KEY
  • CHECK

Давайте обсудим каждое из этих ограничений попродробнее.

Ограничение NOT NULL

Ограничение NOT NULL указывает, что столбец не может принимать значения NULL.

Если к столбцу применено ограничение NOT NULL, вы не сможете вставить новую строку в таблицу без добавления не-NULL-значения в этот столбец.

Пример

Следующая SQL-инструкция создает таблицу persons с четырьмя столбцами, из которых три столбца — id, name и phone — не могут иметь значение NULL.

CREATE TABLE persons (
    id INT NOT NULL,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

Примечание. Нулевое значение (NULL) — это не ноль(0) и не строка символов нулевой длины (»). NULL означает, что записи нет.

Ограниение PRIMARY KEY

Ограничение PRIMARY KEY определяет столбец или набор столбцов, значения которых однозначно идентифицируют строку в таблице. То есть никакие две строки в таблице не могут иметь одинаковое значение первичного ключа. Также нельзя вводить значение NULL в столбец первичного ключа.

Пример

Следующая SQL-инструкция создает таблицу persons и указывает столбец id в качестве первичного ключа. Это означает, что в этом поле не допускаются значения NULL или дубликаты.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

Примечание. Первичный ключ обычно состоит из одного столбца в таблице, однако несколько столбцов могут составлять первичный ключ. Например, адрес электронной почты сотрудника или присвоенный ID является логическим первичным ключом для таблицы сотрудников.

Ограничение UNIQUE

Ограничение UNIQUE означает, что в указанных столбцах обязательно должны быть уникальные значения.

Хотя и ограничение UNIQUE, и ограничение PRIMARY KEY обеспечивают уникальность значений, есть различия.

UNIQUE  лучше PRIMARY KEY, когда вы хотите обеспечить уникальность столбца или комбинации столбцов, которые не являются первичным ключом.

Пример

Следующая SQL-инструкция создает таблицу persons и определяет столбец phone как уникальный. Это означает, что это поле не допускает дублирования значений.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

Примечание. В одной таблице может быть задано ограничений UNIQUE, но только одно ограничение PRIMARY KEY. Кроме того, в отличие от ограничений PRIMARY KEY, ограничения UNIQUE допускают значения NULL.

Ограничение DEFAULT

Ограничение DEFAULT определяет значение по умолчанию для столбцов.

Значение столбца по умолчанию — это некоторое значение, которое будет вставлено в столбец базой данных, если оператор INSERT явно не назначит конкретное значение.

Пример

В следующей SQL-инструкции мы задаем значение по умолчанию для столбца country.

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE,
    country VARCHAR(30) NOT NULL DEFAULT 'Россия'
);

Примечание. Если вы определили столбец таблицы как NOT NULL, но присвоили ему значение по умолчанию, то в операторе INSERT вам не нужно явно присваивать значение этому столбцу, чтобы вставить новую строку в таблицу.

Ограничение FOREIGN KEY

Внешний ключ (foreign key) — это столбец или комбинация столбцов, которые используются для установления и обеспечения взаимосвязи между данными в двух таблицах.

Ниже — диаграмма, которая показывает связь между таблицами сотрудников (employees) и отделов (departments). Если вы внимательно посмотрите на нее, то заметите, что столбец dept_id таблицы сотрудников совпадает со столбцом первичного ключа таблицы отделов. Поэтому столбец dept_id таблицы сотрудников является внешним ключом для таблицы отделов.

В MySQL можно создать внешний ключ, задав ограничение FOREIGN KEY при создании таблицы следующим образом.

Пример

В следующей SQL-инструкции мы определяем столбец dept_id таблицы employees как внешний ключ, который ссылается на столбец dept_id таблицы departments.

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

Ограничение CHECK

Ограничение CHECK используется для ограничения значений, которые могут быть помещены в столбец.

Например, диапазон значений для столбца зарплаты salary можно ограничить, создав ограничение CHECK, которое допускает значения только от 30 000 до 100 000. Это предотвратит ввод зарплат за пределами обычного (условного) диапазона. 

Пример

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT NOT NULL CHECK (salary >= 3000 AND salary <= 10000),
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

Примечание. MySQL не поддерживает ограничение CHECK.

  • Главная

  • Инструкции

  • MySQL

  • Ограничения SQL: как создать, примеры

В процессе работы с таблицами SQL вам нередко нужно будет устанавливать ограничения в базе данных SQL на типы данных, которые могут храниться в определенной таблице. Допустим, у вас есть таблица с данными о сотрудниках — логично, что значения в некоторых ячейках не могут быть пустыми. И мы можем задать такое ограничение значений SQL при помощи простой инструкции. Также можно требовать, чтобы вводимые значения были уникальными, или, например, проверять данные по условию. В статье рассмотрим, как это сделать и используем все возможные типы ограничений, но сначала немного о терминологии.

То или иное правило, которое мы применяем к полям SQL, определяя, какие значение допустимо туда вносить, а какие нет, будет называться ограничением SQL. После добавления такого правила программа будет проверять, можно ли вставлять, обновлять или удалять данные в таблице, исходя из заданных пользователем ограничений. И если нет, операция не будет выполнена и программа вернет ошибку. Теперь давайте рассмотрим все возможные типы ограничений в базах данных SQL, а для наглядности приведем примеры, которые могут иметь практическую ценность для вас.

Добавление ограничений SQL

Создать ограничения SQL можно, используя инструкции PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK и NOT NULL.

Ограничение NOT NULL

Ограничение NOT NULL гарантирует, что столбец обязательно будет иметь значение для каждой записи, то есть значение будет не нулевым. Таким образом программа не позволит хранить в столбцах пустые значения. Давайте создадим таблицу, содержащую столбец с таким ограничением:

CREATE TABLE Countries (
Country VARCHAR(46) NOT NULL,
Capital VARCHAR(46)
)

Здесь мы допускаем, что название столицы государства может быть опущено, но при этом обязательно должно быть введено название страны. Попробуем добавить запись, нарушающую это правило:

INSERT INTO Countries VALUES (null, 'Madrid')

Результатом будет эта ошибка:

Column 'Country' cannot be null

А вот такая запись ошибки не вызовет, потому что оставлять пустым столбец с названиями столиц (Capital) мы не запрещали:

INSERT INTO Countries VALUES ('Spain', null)

Ограничение NOT NULL может быть полезно для столбцов с контактными данными, когда нам нужно обязать пользователя, например, ввести свою электронную почту или номер телефона. Поэтому такие обязательные поля нередко используют ограничение NOT NULL, чтобы гарантировать, что пользователь введет определенное значение:

CREATE TABLE Subscribers (
SubscriberName VARCHAR(46) NOT NULL,
SubscriberContact VARCHAR(46) NOT NULL,
)

В данном случае мы требуем от пользователей обязательного ввода имени и адреса электронной почты, установив ограничение для каждого поля таблицы в 64 символа. Указывать лимиты на количество символов в некоторых полях тоже может быть полезно, чтобы предотвратить добавление заведомо некорректных данных. Также эта операция нередко применяется для экономии, чтобы не раздувать объем базы данных.

Ограничение UNIQUE

Unique значит «уникальный», и это название полностью отражает суть ограничения. Таким образом, ограничение UNIQUE гарантирует, что никакие два значения в определяемом столбце не будут одинаковыми. Давайте посмотрим на таблицу, в которой используется UNIQUE:

CREATE TABLE Workers1 (
WorkerName VARCHAR(46) NOT NULL,
WorkerDate DATE,
WorkerContact INTEGER UNIQUE
)

Мы создали таблицу работников, в которую будем добавлять имя работника (поле не может быть пустым, так как мы установили для него уже знакомое ограничение NOT NULL), дату приема на работу (в формате даты, на что указывает тип данных DATE) и номер телефона. При этом номер телефона должен быть уникальным, на что и указывает ограничение UNIQUE. Давайте вставим в нашу таблицу следующие данные:

INSERT INTO Workers1 VALUES ('Vasya Pupkin', DATE '2018-05-10', 89009000000)

Теперь при попытке добавления строки с таким же номером телефона:

INSERT INTO Workers1 VALUES ('Petya Pupkin', DATE '2020-06-11', 89009000000)

Программа выдаст ошибку:

Duplicate entry '89009000000' for key 'uniqueconstraint.WorkerContact'

Ограничение UNIQUE идеально подходит для столбцов, которые не должны содержать повторяющихся значений. Например, у каждого из нас уникальные номера паспорта и полиса социального страхования (СНИЛС). Таким образом, если таблица содержит столбцы, в которых хранятся номера паспорта и СНИЛС, эти столбцы должны использовать ограничение UNIQUE. Это необходимо, чтобы избежать того, что у двух человек будут одни и те же номера, которые могут быть вставлены по ошибке или намеренно.

Ограничение CHECK

Check в переводе с английского значит «проверять», и ограничение CHECK служит для проверки значений по определенному условию. Рассмотрим следующий пример:

CREATE TABLE Customers1 (
CustomerName1 VARCHAR(46),
CustomerName2 VARCHAR(46),
CustomerEmail VARCHAR(56),
CustomerAge INTEGER CHECK (CustomerAge>17)
)

Мы включили ограничение по возрасту, который должен быть больше 17 лет. Теперь посмотрим, что мы получим, если покупатель вводит следующие данные:

INSERT INTO Customers1 VALUES ('Vasya', 'Pupkin', 'vasya_pupkin@anysite.com', 17)

Вот что нам выдаст система:

Check constraint 'checkconstraint_chk_1' is violated

Инструкцию CHECK можно использовать для реализации пользовательских ограничений. Так, если в таблице должны храниться только данные взрослых, мы могли бы использовать ограничение CHECK для столбца «Возраст покупателя» (CustomerAge>17, как в примере выше). Другой пример: если в таблице должны храниться данные только граждан России, мы могли бы использовать CHECK: например, для нового столбца CustomerCountry: CHECK (CustomerCountry='Russia').

Ограничение PRIMARY KEY

PRIMARY KEY — это одно из ограничений ключа таблицы SQL, в данном случае — первичного. PRIMARY KEY используется для создания идентификатора, с которым соотносится каждая строка в таблице. Добавим, что PRIMARY KEY в таблице может относиться только к одному столбцу (и это понятно, так как это идентификатор). Соответственно, каждое значение PRIMARY KEY обязательно должно быть уникальным, при этом нулевые значения в столбце, определенном с помощью PRIMARY KEY, не допускаются. Чтобы было понятнее, о чём речь, рассмотрим следующий пример:

CREATE TABLE Workers2 (
id INTEGER PRIMARY KEY,
WorkerName1 VARCHAR(46),
WorkerName2 VARCHAR(46),
WorkerAge INTEGER CHECK (WorkerAge>17)
)

Как видим, ключ PRIMARY KEY, позволяет нам задать id работника, чтобы затем можно было обращаться к каждой записи через уникальный числовой ключ. Также обратим внимание на уже привычное ограничение CHECK в столбце возраста.

Ограничение FOREIGN KEY

Ограничение FOREIGN KEY (внешний ключ) создает ссылку на PRIMARY KEY из другой таблицы. Таким образом, столбец, в котором есть FOREIGN KEY, ссылается на столбец с PRIMARY KEY из другой таблицы, и текущая таблица связывается с ней через это ограничение. Чтобы было понятнее, что делает этот ключ, давайте посмотрим на пример ограничения FOREIGN KEY, связанного с PRIMARY KEY из уже созданной выше таблицы:

CREATE TABLE WorkersTaxes (
WorkerTax INTEGER,
Worker_id INTEGER,
FOREIGN KEY (Worker_id) REFERENCES Workers2(id)
)

Итак, нам понадобилось создать таблицу для расчета налогов работников. И, чтобы связать эту таблицу (WorkersTaxes) с таблицей работников (Workers2), мы использовали ссылку FOREIGN KEY, которая идентифицирует работников по PRIMARY KEY из таблицы Workers2. Таким образом мы достигли связности значений, и теперь каждый сотрудник может быть без труда идентифицирован в обеих таблицах по связанным ключам.

Другие ограничения

Осталось добавить, что к ограничениям SQL Standard также иногда относят DEFAULT, однако DEFAULT не ограничивает тип вводимых данных, поэтому технически не может быть отнесен к ограничениям. Тем не менее эту инструкцию также следует упомянуть здесь, поскольку она позволяет реализовать довольно важную функцию: подстановку значений по умолчанию, когда пользователь их не вводит. Это может понадобится, например, для того, чтобы избежать возможных ошибок при отсутствии ввода. Рассмотрим следующий пример:

CREATE TABLE Customers2 (
CustomerName1 VARCHAR(46) NOT NULL,
CustomerName2 VARCHAR(46) NOT NULL,
CustomerAge INTEGER DEFAULT 18,
)

Теперь, если покупатель не укажет возраст, он будет проставлен автоматически. В данном случае это помогло бы избежать лишних вопросов, которые бы появились у проверяющих, если бы возраст не был указан. А обязать клиента вводить имя и фамилию мы смогли при помощи уже знакомого ограничения NOT NULL.

Надеемся, вам стало понятно, как использовать каждое ограничение SQL и какие преимущества они дают. Удачной работы!

Атрибуты и ограничения столбцов и таблиц

Последнее обновление: 09.07.2017

При создании столбцов в T-SQL мы можем использовать ряд атрибутов, ряд которых являются ограничениями. Рассмотрим эти атрибуты.

PRIMARY KEY

С помощью выражения PRIMARY KEY столбец можно сделать первичным ключом.

CREATE TABLE Customers
(
	Id INT PRIMARY KEY,
	Age INT,
	FirstName NVARCHAR(20),
	LastName NVARCHAR(20),
	Email VARCHAR(30),
	Phone VARCHAR(20)
)

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

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

CREATE TABLE Customers
(
	Id INT,
	Age INT,
	FirstName NVARCHAR(20),
	LastName NVARCHAR(20),
	Email VARCHAR(30),
	Phone VARCHAR(20),
	PRIMARY KEY(Id)
)

Первичный ключ может быть составным (compound key). Такой ключ может потребоваться, если у нас сразу два столбца должны уникально идентифицировать
строку в таблице. Например:

CREATE TABLE OrderLines
(
	OrderId INT,
	ProductId INT,
	Quantity INT,
	Price MONEY,
	PRIMARY KEY(OrderId, ProductId)
)

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

IDENTITY

Атрибут IDENTITY позволяет сделать столбец идентификатором. Этот атрибут может назначаться для столбцов числовых типов
INT, SMALLINT, BIGINT, TYNIINT, DECIMAL и NUMERIC. При добавлении новых данных в таблицу SQL Server будет инкрементировать на единицу
значение этого столбца у последней записи. Как правило, в роли идентификатора выступает тот же столбец, который является первичным ключом, хотя в принципе это необязательно.

CREATE TABLE Customers
(
	Id INT PRIMARY KEY IDENTITY,
	Age INT,
	FirstName NVARCHAR(20),
	LastName NVARCHAR(20),
	Email VARCHAR(30),
	Phone VARCHAR(20)
)

Также можно использовать полную форму атрибута:

IDENTITY(seed, increment)

Здесь параметр seed указывает на начальное значение, с которого будет начинаться отсчет. А параметр increment определяет,
насколько будет увеличиваться следующее значение. По умолчанию атрибут использует следующие значения:

IDENTITY(1, 1)

То есть отсчет начинается с 1. А последующие значения увеличиваются на единицу. Но мы можем это поведение переопределить. Например:

Id INT IDENTITY (2, 3)

В данном случае отсчет начнется с 2, а значение каждой последующей записи будет увеличиваться на 3. То есть первая строка будет иметь значение 2, вторая — 5, третья — 8 и т.д.

Также следует учитывать, что в таблице только один столбец должен иметь такой атрибут.

UNIQUE

Если мы хотим, чтобы столбец имел только уникальные значения, то для него можно определить атрибут UNIQUE.

CREATE TABLE Customers
(
	Id INT PRIMARY KEY IDENTITY,
	Age INT,
	FirstName NVARCHAR(20),
	LastName NVARCHAR(20),
	Email VARCHAR(30) UNIQUE,
	Phone VARCHAR(20) UNIQUE
)

В данном случае столбцы, которые представляют электронный адрес и телефон, будут иметь уникальные значения. И мы не сможем добавить в таблицу две строки, у которых
значения для этих столбцов будет совпадать.

Также мы можем определить этот атрибут на уровне таблицы:

CREATE TABLE Customers
(
	Id INT PRIMARY KEY IDENTITY,
	Age INT,
	FirstName NVARCHAR(20),
	LastName NVARCHAR(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 IDENTITY,
	Age INT,
	FirstName NVARCHAR(20) NOT NULL,
	LastName NVARCHAR(20) NOT NULL,
	Email VARCHAR(30) UNIQUE,
	Phone VARCHAR(20) UNIQUE
)

DEFAULT

Атрибут DEFAULT определяет значение по умолчанию для столбца. Если при добавлении данных для столбца не будет предусмотрено значение, то для него будет
использоваться значение по умолчанию.

CREATE TABLE Customers
(
	Id INT PRIMARY KEY IDENTITY,
	Age INT DEFAULT 18,
	FirstName NVARCHAR(20) NOT NULL,
	LastName NVARCHAR(20) NOT NULL,
	Email VARCHAR(30) UNIQUE,
	Phone VARCHAR(20) UNIQUE
);

Здесь для столбца Age предусмотрено значение по умолчанию 18.

CHECK

Ключевое слово CHECK задает ограничение для диапазона значений, которые могут храниться в столбце. Для этого после слова CHECK
указывается в скобках условие, которому должен соответствовать столбец или несколько столбцов. Например, возраст клиентов не может быть меньше 0 или больше 100:

CREATE TABLE Customers
(
	Id INT PRIMARY KEY IDENTITY,
	Age INT DEFAULT 18 CHECK(Age >0 AND Age < 100),
	FirstName NVARCHAR(20) NOT NULL,
	LastName NVARCHAR(20) NOT NULL,
	Email VARCHAR(30) UNIQUE CHECK(Email !=''),
	Phone VARCHAR(20) UNIQUE CHECK(Phone !='')
);

Здесь также указывается, что столбцы Email и Phone не могут иметь пустую строку в качестве значения (пустая строка не эквивалентна значению NULL).

Для соединения условий используется ключевое слово AND. Условия можно задать в виде операций сравнения больше (>), меньше (<), не равно (!=).

Также с помощью CHECK можно создать ограничение в целом для таблицы:

CREATE TABLE Customers
(
	Id INT PRIMARY KEY IDENTITY,
	Age INT DEFAULT 18,
	FirstName NVARCHAR(20) NOT NULL,
	LastName NVARCHAR(20) NOT NULL,
	Email VARCHAR(30) UNIQUE,
	Phone VARCHAR(20) UNIQUE,
	CHECK((Age >0 AND Age<100) AND (Email !='') AND (Phone !=''))
)

Оператор CONSTRAINT. Установка имени ограничений.

С помощью ключевого слова CONSTRAINT можно задать имя для ограничений. В качестве ограничений могут использоваться
PRIMARY KEY, UNIQUE, DEFAULT, CHECK.

Имена ограничений можно задать на уровне столбцов. Они указываются после CONSTRAINT перед атрибутами:

CREATE TABLE Customers
(
	Id INT CONSTRAINT PK_Customer_Id PRIMARY KEY IDENTITY,
	Age INT 
		CONSTRAINT DF_Customer_Age DEFAULT 18 
		CONSTRAINT CK_Customer_Age CHECK(Age >0 AND Age < 100),
	FirstName NVARCHAR(20) NOT NULL,
	LastName NVARCHAR(20) NOT NULL,
	Email VARCHAR(30) CONSTRAINT UQ_Customer_Email UNIQUE,
	Phone VARCHAR(20) CONSTRAINT UQ_Customer_Phone UNIQUE
)

Ограничения могут носить произвольные названия, но, как правило, для применяются следующие префиксы:

  • «PK_» — для PRIMARY KEY

  • «FK_» — для FOREIGN KEY

  • «CK_» — для CHECK

  • «UQ_» — для UNIQUE

  • «DF_» — для DEFAULT

В принципе необязательно задавать имена ограничений, при установке соответствующих атрибутов SQL Server автоматически определяет их имена.
Но, зная имя ограничения, мы можем к нему обращаться, например, для его удаления.

И также можно задать все имена ограничений через атрибуты таблицы:

CREATE TABLE Customers
(
	Id INT IDENTITY,
	Age INT CONSTRAINT DF_Customer_Age DEFAULT 18, 
	FirstName NVARCHAR(20) NOT NULL,
	LastName NVARCHAR(20) NOT NULL,
	Email VARCHAR(30),
	Phone VARCHAR(20),
	CONSTRAINT PK_Customer_Id PRIMARY KEY (Id), 
	CONSTRAINT CK_Customer_Age CHECK(Age >0 AND Age < 100),
	CONSTRAINT UQ_Customer_Email UNIQUE (Email),
	CONSTRAINT UQ_Customer_Phone UNIQUE (Phone)
)

«SQL

script1adsense2code

script1adsense3code

ТРУДНОСТИ

SQL CONSTRAINTS — это целостность, которая определяет некоторые условия, которые не позволяют столбцу оставаться истинным при вставке, обновлении или удалении данных в столбце. Ограничения могут быть указаны, когда таблица создается сначала с помощью оператора CREATE TABLE или во время изменения структуры существующей таблицы с помощью инструкции ALTER TABLE.

SQL CONSTRAINTS используются для реализации правил таблицы. Если какое-либо нарушение ограничений вызвало какое-либо действие, не выполняющееся над таблицей, действие отменяется ограничением.

Некоторые CONSTRAINTS могут использоваться вместе с оператором SQL CREATE TABLE.

Общая структура SQL CONSTRAINT определяется как:

За ключевым словом CONSTRAINT следует имя ограничения, за которым следует столбец или список столбцов.

Типы SQL-ограничений

SQL предоставляет следующие типы ограничений:

скованность Описание
НЕНУЛЕВОЙ Это ограничение подтверждает, что столбец не может хранить значение NULL.
УНИКАЛЬНАЯ Это ограничение гарантирует, что каждая строка для столбца должна иметь различное значение.
ОСНОВНОЙ КЛЮЧ Это ограничение является комбинацией ограничения NOT NULL и ограничения UNIQUE. Это ограничение гарантирует, что конкретный столбец или комбинация из двух или более столбцов для таблицы имеют уникальную идентификацию, которая помогает легче и быстрее найти конкретную запись в таблице.
ПРОВЕРЯТЬ Проверочное ограничение гарантирует, что значение, хранящееся в столбце, соответствует определенному условию.
ДЕФОЛТ Это ограничение предоставляет значение по умолчанию, если для этого столбца указано значение none.
ИНОСТРАННЫЙ КЛЮЧ Ограничение внешнего ключа используется для обеспечения ссылочной целостности данных. в одной таблице, чтобы сопоставить значения в другой таблице.

Синтаксис:

 CREATE TABLE <table_name> (
ограничение column1 data_type [(size)],
ограничение column2 data_type [(size)],
...);

Параметры:

название Описание
table_name Имя таблицы, в которой хранятся данные.
column1, column2 Наименование столбцов таблицы.
тип данных Char, varchar, integer, decimal, date и многое другое.
размер Максимальная длина столбца таблицы.
ограничение Ограничение для столбца или таблицы.

Содержание:

  • SQL CREATE TABLE с ограничением для исключения значения NULL
  • SQL CREATE TABLE для проверки уникального значения
  • SQL CREATE TABLE для проверки уникального значения на нескольких столбцах
  • SQL CREATE TABLE с уникальным ограничением
  • SQL CREATE TABLE с ограничением CHECK
  • SQL CREATE TABLE с использованием ограничения по умолчанию
  • SQL CREATE TABLE с использованием значений по умолчанию и CHECK CONSTRAINT
  • SQL CREATE TABLE с оператором CHECK CONSTRAINT и IN
  • SQL CREATE TABLE с оператором CHECK CONSTRAINT и LIKE
  • SQL CREATE TABLE с оператором CHECK CONSTRAINT и OR
  • SQL CREATE TABLE с использованием оператора CHECK CONSTRAINT и AND OR
  • SQL CREATE TABLE с использованием CASCADE

SQL CREATE TABLE с ограничением для исключения значения NULL

В следующем разделе будет описано, как NOT NULL CONSTRAINT подтверждает, что столбец не может иметь значение NULL в инструкции CREATE TABLE.

Пример:

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ
agent_code голец 6 нет
имя агента голец 25 нет
рабочая область голец 25 нет

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
agent_code char(6) NOT NULL,
agent_name char(25) NOT NULL,
working_area char(25) NOT NULL) ;

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход:

«Sql

SQL CREATE TABLE для проверки уникального значения

В следующем разделе мы обсудим, как SQL UNIQUE CONSTRAINT гарантирует, что каждая строка для столбца имеет разные значения в операторе CREATE TABLE.

Пример:

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
ord_num десятичный 6 нет УНИКАЛЬНАЯ
ord_amount десятичный 12 2 да
ord_date Дата нет
cust_code голец 6 нет
agent_code голец 6 нет

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE  mytest(
ord_num decimal(6) NOT NULL UNIQUE,
ord_amount decimal(12,2),
ord_date date NOT NULL,
cust_code char(6) NOT NULL,
agent_code char(6) NOT NULL);

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest; 

Выход:

«Sql

SQL CREATE TABLE для проверки уникального значения на нескольких столбцах

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 нет
комиссия десятичный 5 2 да

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
agent_code char(6) NOT NULL UNIQUE,
agent_name char(25) NOT NULL UNIQUE,
working_area char(25) NOT NULL,
commission decimal(5,2));

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход:

«Sql

SQL CREATE TABLE с уникальным ограничением

Ограничение SQL UNIQUE используется для обеспечения того, чтобы каждая строка столбца имела различное значение. На этой странице мы собираемся обсудить, как работает SQL UNIQUE CONSTRAINT, если он используется в конце инструкции CREATE TABLE вместо использования UNIQUE CONSTRAINT в определенных столбцах.

Пример :

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
cust_code голец 6 нет УНИКАЛЬНАЯ
CUST_NAME голец 25 нет
cust_city голец 25 нет
класс целое число да
agent_code голец 6 нет УНИКАЛЬНАЯ

можно использовать следующий оператор SQL :

Код SQL:

CREATE TABLE mytest(
cust_code char(6) NOT NULL,
cust_name char(25) NOT NULL,
cust_city char(25) NOT NULL,
grade integer,
agent_code char(6) NOT NULL,
UNIQUE(cust_code,agent_code));

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход:

«Sql

SQL CREATE TABLE с ограничением CHECK

SQL CHECK CONSTRAINT гарантирует, что значение для определенного столбца или столбцов удовлетворяет заданному условию.

Задача ограничения CHECK заключается в ограничении значений для столбца таблицы.

Замечания :

  • SQL CHECK CONSTRAINT нельзя использовать в VIEW.
  • SQL CHECK CONSTRAINT нельзя использовать в подзапросе.
  • SQL CHECK CONSTRAINT также можно использовать в инструкциях ALTER TABLE и DROP TABLE.

В следующем примере создается таблица. Таблица содержит CHECK CONSTRAINT для столбца комиссии. Ограничение гарантирует, что «комиссия» должна быть меньше 1. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 нет
комиссия целое число ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
agent_code char(6) NOT NULL UNIQUE ,
agent_name char(25) NOT NULL UNIQUE ,
working_area char(25) NOT NULL ,
commission decimal CHECK( commission<1));

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход :

«Создание

SQL CREATE TABLE с использованием ограничения по умолчанию

SQL DEFAULT CONSTRAINT предоставляет значение по умолчанию, если для столбца не задано значение none.

Пример:

Включить DEFAULT CONSTRAINT в столбец ‘working_area’, который гарантирует, что —

1. «Working_area» должно быть «Mumbai», если для этого столбца не указано ни одного,

во время создания таблицы, имена полей и типы данных которой —

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ДЕФОЛТ
комиссия десятичный 8 2 да

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
agent_code char(6) NOT NULL UNIQUE ,
agent_name char(25) NOT NULL UNIQUE ,
working_area char(25) DEFAULT 'Mumbai',
commission decimal(8,2)); 

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest; 

Выход :

«Sql

SQL CREATE TABLE с использованием значений по умолчанию и CHECK CONSTRAINT

В следующем разделе мы обсудили использование SQL DEFAULT CONSTRAINT и использование SQL CHECK CONSTRAINT при создании таблицы.

Пример:

Чтобы включить CHECK CONSTRAINT для «комиссии» и DEFAULT CONSTRAINT для «рабочей_области», это гарантирует, что —

1. «Комиссия» должна быть больше .1 и меньше .3,

2. «Working_area» должно быть «Mumbai», если для этого столбца не указано ни одного,

во время создания таблицы, которая содержит следующие имена полей и типы данных —

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ДЕФОЛТ
комиссия десятичный 8 2 да ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
agent_code char(6) NOT NULL UNIQUE ,
agent_name char(25) NOT NULL UNIQUE ,
working_area char(25) DEFAULT 'Mumbai',
commission decimal(8,2) 
CHECK(commission>.1 AND commission<.3));

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход :

«Sql

SQL CREATE TABLE с оператором CHECK CONSTRAINT и IN

В следующем разделе мы обсудили, как использовать оператор SQL IN вместе с SQL CHECK CONSTRAINT.

Условие CHECK CONSTRAINT может быть определено с использованием любого из базовых операторов сравнения, таких как ( >, <, =,> =, <=, <> ), а также операторов BETWEEN, IN, LIKE и NULL.

Пример:

Чтобы включить две проверки ограничения, которые —

1. Первый столбец находится в столбце «working_area», который гарантирует, что works_area должен быть либо «London», либо «Brisban», либо «Chennai», либо «Mumbai»,

2. Второй столбец — «комиссия», который гарантирует, что комиссия должна быть меньше 1,

В следующей таблице имена полей и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 нет ПРОВЕРЯТЬ
комиссия целое число ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
agent_code char(6) NOT NULL UNIQUE ,
agent_name char(25) NOT NULL UNIQUE ,
working_area char(25) CHECK
( working_area IN('London','Brisban','Chennai','Mumbai')) ,
commission decimal CHECK(commission<1)); 

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход:

«Sql

SQL CREATE TABLE с оператором CHECK CONSTRAINT и LIKE

В следующем разделе мы обсудим, как можно использовать оператор SQL LIKE с CHECK CONSTRAINT.

Пример:

Чтобы включить CHECK CONSTRAINT в столбец ‘ord_date’, который гарантирует, что формат ‘ord_date’ должен быть похож на ‘- / — / —-‘, например, (’18 / 05/1998 ‘) на время создания таблицы со следующими именами полей и типов данных —

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
ord_num десятичный 6 нет УНИКАЛЬНАЯ
ord_amount десятичный 12 2 да
ord_date голец 10 нет ПРОВЕРЯТЬ
cust_code голец 6 нет
agent_code голец 6 нет

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
ord_num decimal(6) NOT NULL UNIQUE ,
ord_amount decimal(12,2) ,
ord_date char(10) NOT NULL CHECK
(ord_date LIKE '--/--/----' ),
cust_code char(6) NOT NULL ,
agent_code char(6) NOT NULL
);    

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest; 

Выход :

«Создание

SQL CREATE TABLE с оператором CHECK CONSTRAINT и OR

В следующей теме мы обсуждаем использование оператора OR вместе с CHECK CONSTRAINT.

Пример:

Чтобы включить CHECK CONSTRAINT в столбцы ‘Commission’ и ‘working_area’, который гарантирует, что значение ‘Commission’ должно быть меньше .20, а значение ‘working_area’ должно быть ‘London’ во время создания следующей таблицы, которая состоит из имен полей и типы данных —

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ПРОВЕРЯТЬ
комиссия десятичный 8 2 да ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
agent_code char(6) NOT NULL UNIQUE ,
agent_name char(25) NOT NULL UNIQUE ,
working_area char(25) ,
commission decimal(8,2) ,
CHECK(commission<.20 OR working_area='London')); 

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход :

«Sql

SQL CREATE TABLE с использованием оператора CHECK CONSTRAINT и оператора AND, OR

В следующей теме мы обсудим использование операторов OR и AND вместе с CHECK CONSTRAINT. Условие начнет работать во время вставки записей в таблицу.

Пример:

Включить CHECK CONSTRAINT в столбцы ‘Commission’ и ‘working_area’, который гарантирует, что —

1. «Комиссия» должна быть меньше .14, а «working_area» должно быть «Лондон»,

2. или «комиссия» должна быть меньше .15, а «working_area» должно быть «Мумбаи»,

3. или «комиссия» должна быть меньше .13, а «working_area» должно быть «Нью-Йорк»

во время создания таблицы, имена полей и типы данных которых

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ПРОВЕРЯТЬ
комиссия десятичный 8 2 да ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest (
agent_code char(6) NOT NULL UNIQUE ,
agent_name char(25) NOT NULL UNIQUE ,
working_area char(25) ,
commission decimal(8,2) ,
CHECK((commission<.14 AND working_area='London')
OR (commission<.15 AND working_area='Mumbai')
OR (commission<.13 AND working_area='New York'))); 

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход :

«Создание

SQL CREATE TABLE с использованием CASCADE

Опция CASCADE с ON DELETE позволяет удалять строки из дочерней таблицы, когда соответствующие строки удаляются из родительской таблицы.

DELETE CASCADE работает по ссылке внешнего ключа и удаляет дочерние записи, связанные с родительскими записями.

Пример:

Чтобы создать таблицу, которая содержит следующие имя поля и типы данных —

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
tranno десятичный нет
Идентификатор компании VARCHAR 6 да ИНОСТРАННЫЙ КЛЮЧ
код изделия VARCHAR 10 да ОСНОВНОЙ КЛЮЧ
coname VARCHAR 35 да
имя элемента VARCHAR 35 да
iqty целое число да

Таблица содержит PRIMARY KEY для «itemcode» и FOREIGN KEY для столбца «company_id», который ссылается на столбец «company_id» таблицы «company».

можно использовать следующий оператор SQL:

Код SQL:

CREATE TABLE mytest(
tranno decimal NOT NULL,
company_id varchar(6),
itemcode varchar(10),
coname varchar(35),
itemname varchar(35),
iqty integer,
PRIMARY KEY(itemcode),
FOREIGN KEY(company_id)
REFERENCES company (company_id)
ON DELETE CASCADE);

Чтобы увидеть структуру созданной таблицы:

Код SQL:

DESCRIBE mytest;

Выход:

«Sql

Выводы указанного оператора SQL, показанного здесь, взяты с использованием Oracle Database 10g Express Edition.

Упражнения по SQL

  • Упражнения по SQL, практика, решение
  • SQL Получить данные из таблиц [33 Упражнения]
  • Булевы и реляционные операторы SQL [12 упражнений]
  • Подстановочные знаки SQL и специальные операторы [22 упражнения]
  • Агрегатные функции SQL [25 упражнений]
  • Вывод запроса форматирования SQL [10 упражнений]
  • SQL-запросы к нескольким таблицам [7 упражнений]
  • ФИЛЬТРАЦИЯ И СОРТИРОВКА в базе данных персонала [38 упражнений]
  • SQL СОЕДИНЯЕТ
    • SQL СОЕДИНЯЕТСЯ [29 упражнений]
    • SQL присоединяется к базе данных HR [27 упражнений]
  • SQL ПОДПИСИ
    • ПОДПИСИ SQL [39 упражнений]
    • SQL ПОДПИСИ по базе данных HR [55 упражнений]
  • SQL Union [9 упражнений]
  • SQL View [16 упражнений]
  • Управление учетными записями пользователей SQL [16 упражнение]
  • База данных фильмов
    • href = «/ sql-упражнения / база данных фильмов-упражнение / основные упражнения-на-фильме-базе данных.php»> ОСНОВНЫЕ запросы к базе данных фильмов [10 упражнений]
    • ПОДПИСКИ на фильм База данных [16 упражнений]
    • ПРИСОЕДИНЯЕТСЯ к базе данных фильма [24 упражнения]
  • Футбольная база
    • Вступление
    • ОСНОВНЫЕ запросы по футболу базы данных [29 упражнений]
    • ПОДПИСКИ по футбольной базе данных [33 упражнения]
    • ПРИСОЕДИНЯЕТСЯ к запросам по футбольной базе данных [61 упражнений]
  • База данных больницы
    • Вступление
    • ОСНОВНЫЕ, ПОДПИСИ И СОЕДИНЕНИЯ [39 упражнений]
  • База данных сотрудников
    • ОСНОВНЫЕ запросы к базе данных сотрудников [115 упражнений]
    • БРОНИРОВАНИЕ на сотрудника База данных [77 Упражнения]
  • Еще не все!

Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.

Предыдущая: Внешний ключ
Далее: Изменить таблицу



SQL Ограничения используются для указания правил для данных в таблице.


Создание ограничений

Ограничения могут быть заданы при создании таблицы с помощью инструкции CREATE TABLE или после создания таблицы с помощью инструкции ALTER TABLE.

Синтаксис

CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
   
….
);


Ограничения в таблице

SQL ограничения используются для указания правил для данных в таблице.

Ограничения используются для ограничения типа данных, которые могут быть помещены в таблицу.
Это обеспечивает точность и достоверность данных в таблице.
Если существует какое-либо нарушение между ограничением и действием данных, действие прерывается.

Ограничения могут быть на уровне столбцов или таблиц.
Ограничения уровня столбца применяются к столбцу, а ограничения уровня таблицы ко всей таблице.

В SQL обычно используются следующие ограничения:

  • NOT NULL — Гарантирует, что столбец не может иметь нулевое значение
  • UNIQUE — Гарантирует, что все значения в столбце будут разными
  • PRIMARY KEY — Комбинация NOT NULL и UNIQUE.
    Уникально идентифицирует каждую строку в таблице
  • FOREIGN KEY — Однозначно идентифицирует строку/запись в другой таблице
  • CHECK — Гарантирует, что все значения в столбце удовлетворяют определенному условию
  • DEFAULT — Задает значение по умолчанию для столбца, если значение не указано
  • INDEX — Используется для быстрого создания и извлечения данных из базы данных

Понравилась статья? Поделить с друзьями:
  • Руководство страны 1917 года
  • Руководство по эксплуатации для mitsubishi pajero
  • Мультиметр zt102 инструкция на русском языке
  • Прополисное молочко эмульсия инструкция по применению
  • Пробиотики для кишечника взрослому после антибиотиков инструкция