SQL FOREIGN KEY
ИНОСТРАННЫЙ КЛЮЧ
SQL FOREIGN KEY CONSTRAINT используется для обеспечения ссылочной целостности данных в одной таблице для соответствия значениям в другой таблице.
FOREIGN KEY CONSTRAINT - это столбец или список столбцов, который указывает на PRIMARY KEY другой таблицы.
Основное назначение FOREIGN KEY состоит в том, что будут отображаться только те значения, которые присутствуют в таблице первичного ключа.
Для каждой строки в ссылочной таблице (таблица содержит FOREIGN KEY) внешний ключ должен соответствовать существующему первичному ключу в ссылочной таблице (таблица содержит PRIMARY KEY). Это исполнение FOREIGN KEY называется ссылочной целостностью.
Структура и тип данных PRIMARY KEY и FOREIGN KEY должны быть одинаковыми.
Значения столбцов FOREIGN KEY в каждой строке ссылочной таблицы должны совпадать со значениями соответствующих столбцов первичного ключа строки в ссылочной таблице.
Синтаксис:
CREATE TABLE <table_name> ( column1 data_type [(size)], column2 data_type [(size)], ограничение (имя_ограничения) ИНОСТРАННЫЙ КЛЮЧ [column1, column2 ...] ССЫЛКИ [primary_key_table] (column_list_of_primary_key_table) ...);
Параметры:
название | Описание |
---|---|
table_name | Имя таблицы, в которой хранятся данные. |
column1, column2 | Наименование столбцов таблицы. |
тип данных | Это char, varchar, целое число, десятичное число, дата и многое другое. |
размер | Максимальная длина столбца таблицы. |
ограничение | Это ключевое слово. Это ключевое слово не является обязательным. |
constraint_name | Имя ограничения, определяемое пользователем. |
primary_key_table | Таблица, где находится первичный ключ. |
column_list_of_primary_key_table | Список столбцов, который составляет первичный ключ для таблицы. |
Пример:
Предположим, у нас есть таблица «агенты», которая включает в себя все данные агентов, и мы собираемся создать еще одну таблицу с именем «customer1», которая включает все записи клиентов. Столбцы и типы данных для обеих таблиц показаны ниже.
Здесь ограничение заключается в том, что все клиенты должны быть связаны с агентом, который уже находится в таблице «агенты». В этом случае необходимо создать SQL FOREIGN KEY CONSTRAINT с таблицей customer1, которая связана с SQL PRIMARY KEY CONSTRAINT таблицы agent.
Теперь мы можем гарантировать, что все клиенты в таблице «customer1» связаны с агентом в таблице «agent». Другими словами, таблица «customer1» не может содержать информацию о каком-либо агенте, которого нет в таблице «agent».
агенты
Имя поля | Тип данных | Размер | Десятичные знаки | НОЛЬ | скованность |
---|---|---|---|---|---|
agent_code | голец | 6 | нет | ОСНОВНОЙ КЛЮЧ | |
имя агента | голец | 40 | нет | ||
рабочая область | голец | 35 | да | ||
комиссия | десятичный | 10 | 2 | да | |
номер телефона | голец | 17 | да |
customer1
Имя поля | Тип данных | Размер | Десятичные знаки | НОЛЬ | скованность |
---|---|---|---|---|---|
cust_code | голец | 6 | нет | ОСНОВНОЙ КЛЮЧ | |
CUST_NAME | голец | 25 | да | ||
cust_city | голец | 25 | да | ||
agent_code | голец | 6 | да | ИНОСТРАННЫЙ КЛЮЧ |
можно использовать следующий оператор SQL:
Код SQL:
CREATE TABLE customer1(
cust_code char(6) NOT NULL PRIMARY KEY,
cust_name char(25),
cust_city char(25),
agent_code char(6),
FOREIGN KEY(agent_code)
REFERENCES agents (agent_code)
) ;
Наглядное представление
SQL CREATE TABLE с FOREIGN KEY в ограничении столбца
В следующем разделе мы обсудим использование FOREIGN KEY CONSTRAINT без использования ключевого слова 'external key'.
Пример:
Создать таблицу, которая содержит следующие имена полей и типы данных.
Имя поля | Тип данных | Размер | Десятичные знаки | НОЛЬ | скованность |
---|---|---|---|---|---|
cust_code | голец | 6 | нет | ОСНОВНОЙ КЛЮЧ | |
CUST_NAME | голец | 25 | да | ||
cust_city | голец | 25 | да | ||
agent_code | десятичный | 6 | да |
Таблица содержит PRIMARY KEY CONSTRAINT для 'cust_code' и FOREIGN KEY для 'agent_code' без использования ключевого слова FOREIGN KEY.
Код агента в таблице «агенты» уникален.
В таблице «mytest» будут отображаться только те «код_агента», которые присутствуют в таблице «агенты», поскольку ссылочный столбец - это «код_агента» таблицы «агенты».
можно использовать следующий оператор SQL:
Код SQL:
CREATE TABLE mytest(
cust_code char(6) NOT NULL PRIMARY KEY,
cust_name char(25),
cust_city char(25),
agent_code char(6)
REFERENCES agents(agent_code));
Чтобы увидеть структуру созданной таблицы:
Код SQL:
DESCRIBE mytest;
Выход:
SQL CREATE TABLE с использованием FOREIGN KEY CONSTRAINT без указания столбцов PRIMARY KEY
В следующем разделе мы обсудим, как использовать FOREIGN KEY CONSTRAINT без указания столбцов первичного ключа.
Пример:
Создать таблицу, содержащую следующие имена полей и типы данных:
Имя поля | Тип данных | Размер | Десятичные знаки | НОЛЬ | скованность |
---|---|---|---|---|---|
cust_code | голец | 6 | нет | ОСНОВНОЙ КЛЮЧ | |
CUST_NAME | голец | 25 | да | ||
cust_city | голец | 25 | да | ||
agent_code | десятичный | 6 | да |
В таблице содержится PRIMARY KEY CONSTRAINT для 'cust_code' и FOREIGN KEY для 'agent_code' без указания столбца PRIMARY KEY -
Код агента в таблице «агенты» уникален.
В таблице «mytest» будут отображаться только те «код_агента», которые присутствуют в таблице «агенты», поскольку ссылочный столбец - это «код_агента» таблицы «агенты».
можно использовать следующий оператор SQL:
Код SQL:
CREATE TABLE mytest(
cust_code char(6) NOT NULL PRIMARY KEY,
cust_name char(25),
cust_city char(25),
agent_code char(6)
REFERENCES agents);
Чтобы увидеть структуру созданной таблицы:
Код SQL:
DESCRIBE mytest;
Выход:
SQL CREATE TABLE с использованием ограничения FOREIGN KEY со списком столбцов PRIMARY KEY
В следующем разделе будет обсуждаться то, как SQL FOREIGN KEY CONSTRAINT используется со списком столбцов первичного ключа в инструкции CREATE TABLE.
Пример:
Чтобы создать таблицу, которая содержит следующие имена полей и типы данных -
Имя поля | Тип данных | Размер | Десятичные знаки | НОЛЬ | скованность |
---|---|---|---|---|---|
cust_code | голец | 6 | нет | ОСНОВНОЙ КЛЮЧ | |
CUST_NAME | голец | 40 | нет | ||
cust_city | голец | 35 | да | ||
рабочая область | голец | 35 | да | ||
cust_country | голец | 20 | да | ||
класс | десятичный | 4 | 0 | да | |
opening_amt | десятичный | 12 | 2 | да | |
receive_amt | десятичный | 12 | 2 | да | |
payment_amt | десятичный | 12 | 2 | да | |
outstanding_amt | десятичный | 12 | 2 | да | |
номер телефона | голец | 17 | да | ||
agent_code | голец | 7 | да | ИНОСТРАННЫЙ КЛЮЧ |
В таблице содержится PRIMARY KEY CONSTRAINT для 'cust_code' и FOREIGN KEY для 'agent_code'.
'Agent_code' в таблице 'agent1' уникален,
Только те 'agent_code', которые присутствуют в таблице 'agnet1', будут отображаться в таблице 'mytest', поскольку ссылочный столбец является 'agent_code' таблицы 'agnet1',
можно использовать следующий оператор SQL:
Код SQL:
CREATE TABLE mytest(
cust_code char(6) NOT NULL PRIMARY KEY,
cust_name char(40) NOT NULL,
cust_city char(35),
working_area char(35),
cust_country char(20),
grade decimal(4,0),
opening_amt decimal(12,2),
receive_amt decimal(12,2),
payment_amt decimal(12,2),
outstanding_amt decimal(12,2),
phone_no char(17),
agent_code char(6),
FOREIGN KEY(agent_code)
REFERENCES agent1(agent_code),
UNIQUE(cust_code,agent_code));
Чтобы увидеть структуру созданной таблицы:
Код SQL:
DESCRIBE mytest;
Выход:
SQL CREATE TABLE с использованием FOREIGN KEY для нескольких столбцов со списком столбцов PRIMARY KEY
В следующем разделе мы обсудим, как SQL FOREIGN KEY CONSTRAINT можно использовать для нескольких столбцов со списком столбцов первичного ключа в операторе CREATE TABLE.
Пример:
Чтобы создать таблицу, которая содержит следующие имена полей и типы данных -
Имя поля | Тип данных | Размер | Десятичные знаки | НОЛЬ | скованность |
---|---|---|---|---|---|
ord_num | десятичный | 6 | нет | ОСНОВНОЙ КЛЮЧ | |
ord_amount | десятичный | 12 | 2 | да | |
advance_amount | десятичный | 12 | 2 | нет | |
ord_date | Дата | нет | |||
cust_code | голец | 6 | нет | ИНОСТРАННЫЙ КЛЮЧ | |
agent_code | голец | 6 | нет | ИНОСТРАННЫЙ КЛЮЧ | |
ord_description | голец | 60 | нет |
В таблице содержится PRIMARY KEY CONSTRAINT для 'ord_num' и FOREIGN KEY в комбинации столбцов 'cust_code' и 'agent_code'.
Комбинация 'cust_code' и 'agent_code' в таблице 'customer1' является уникальной.
Только те комбинации «cust_code» и «agent_code», которые присутствуют в таблице «customer1», появятся в таблице «mytest», поскольку ссылочные столбцы представляют собой комбинацию «cust_code» и «agent_code» таблицы «customer1».
можно использовать следующий оператор SQL:
Код SQL:
CREATE TABLE mytest(
ord_num decimal(6) NOT NULL PRIMARY KEY,
ord_amount decimal(12,2),
advance_amount decimal(12,2) NOT NULL,
ord_date date NOT NULL,
cust_code char(6) NOT NULL,
agent_code char(6) NOT NULL,
ord_description char(60) NOT NULL,
FOREIGN KEY(cust_code,agent_code)
REFERENCES customer1 (cust_code,agent_code));
Чтобы увидеть структуру созданной таблицы:
Код SQL:
DESCRIBE mytest;
Выход:
SQL CREATE TABLE путем ссылки FOREIGN KEY на собственную таблицу
В следующем разделе мы обсудим, как можно использовать SQL FOREIGN KEY CONSTRAINT для ссылки на свою собственную таблицу в операторе CREATE TABLE.
Пример:
Чтобы создать таблицу, которая содержит следующие поля и типы данных -
Имя поля | Тип данных | Размер | Десятичные знаки | НОЛЬ | скованность |
---|---|---|---|---|---|
cust_code | голец | 6 | нет | ОСНОВНОЙ КЛЮЧ | |
cliant_name | голец | 40 | нет | УНИКАЛЬНАЯ | |
cliant_city | голец | 35 | нет | ||
supp_code | Дата | 6 | нет |
Таблица содержит ПЕРВИЧНЫЙ КЛЮЧ для 'cust_code' и FOREIGN KEY для 'supp_code', где и 'cust_code', и 'supp_code' принадлежат таблице 'mytest'. Для достижения вышеизложенного можно использовать следующий оператор SQL:
Код SQL:
CREATE TABLE mytest(
cust_code char(6) NOT NULL PRIMARY KEY,
cliant_name char(40) NOT NULL UNIQUE,
cliant_city char(35),
supp_code char(6) REFERENCES mytest);
Чтобы увидеть структуру созданной таблицы:
Код SQL:
DESCRIBE mytest;
Выход:
Упражнения по SQL
- Упражнения по SQL, практика, решение
- SQL Получить данные из таблиц [33 Упражнения]
- Булевы и реляционные операторы SQL [12 упражнений]
- Подстановочные знаки SQL и специальные операторы [22 упражнения]
- Агрегатные функции SQL [25 упражнений]
- Вывод запроса форматирования SQL [10 упражнений]
- SQL-запросы к нескольким таблицам [7 упражнений]
- ФИЛЬТРАЦИЯ И СОРТИРОВКА в базе данных персонала [38 упражнений]
- SQL СОЕДИНЯЕТ
- SQL ПОДПИСИ
- SQL Union [9 упражнений]
- SQL View [16 упражнений]
- Управление учетными записями пользователей SQL [16 упражнение]
- База данных фильмов
- ОСНОВНЫЕ запросы к базе данных фильмов [10 упражнений]
- ПОДПИСКИ на фильм База данных [16 упражнений]
- ПРИСОЕДИНЯЕТСЯ к базе данных фильма [24 упражнения]
- Футбольная база
- Вступление
- ОСНОВНЫЕ запросы по футболу базы данных [29 упражнений]
- ПОДПИСКИ по футбольной базе данных [33 упражнения]
- База данных больницы
- База данных сотрудников
- ОСНОВНЫЕ запросы к базе данных сотрудников [115 упражнений]
- БРОНИРОВАНИЕ на сотрудника База данных [77 Упражнения]
- Еще не все!
Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.
Предыдущая: Первичный ключ
Далее: Ограничения
Новый контент: Composer: менеджер зависимостей для PHP , R программирования