Главная Свежие Последние Лучшие Контактная информация  
 
 


Учебное пособие по MySQL » Использование внешних ключей
3.5.6 Использование внешних ключей

В MySQL 3.23.44 и выше в таблицах InnoDB осуществляется проверка ограничений целостности внешних ключей (обратитесь к разделам section 7.5 Таблицы InnoDB и section 1.9.4.5 Внешние ключи).

Фактически для соединения двух таблиц внешние ключи не нужны.

Единственное, что MySQL в настоящее время не осуществляет (в типах таблиц, отличных от InnoDB), это проверку (CHECK) что ключи, которые вы используете, действительно существуют в таблице(ах) на которые вы ссылаетесь, и не удаляет автоматически записи из таблиц с определением внешних ключей. Если же ключи используются обычным образом, все будет работать просто чудесно:

CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
name CHAR(60) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE shirt (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
owner SMALLINT UNSIGNED NOT NULL REFERENCES persons,
PRIMARY KEY (id)
);

INSERT INTO person VALUES (NULL, 'Antonio Paz');

INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', LAST_INSERT_ID()),
(NULL, 'dress', 'white', LAST_INSERT_ID()),
(NULL, 't-shirt', 'blue', LAST_INSERT_ID());

INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');

INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', LAST_INSERT_ID()),
(NULL, 'polo', 'red', LAST_INSERT_ID()),
(NULL, 'dress', 'blue', LAST_INSERT_ID()),
(NULL, 't-shirt', 'white', LAST_INSERT_ID());

SELECT * FROM person;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | Antonio Paz |
| 2 | Lilliana Angelovska |
+----+---------------------+

SELECT * FROM shirt;
+----+---------+--------+-------+
| id | style | color | owner |
+----+---------+--------+-------+
| 1 | polo | blue | 1 |
| 2 | dress | white | 1 |
| 3 | t-shirt | blue | 1 |
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
| 7 | t-shirt | white | 2 |
+----+---------+--------+-------+

SELECT s.* FROM person p, shirt s
WHERE p.name LIKE 'Lilliana%'
AND s.owner = p.id
AND s.color <> 'white';

+----+-------+--------+-------+
| id | style | color | owner |
+----+-------+--------+-------+
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
+----+-------+--------+-------+

Добавить в закладки:

 

теги: MySQL
 

  Еще статьи
Имена баз данных, таблиц, столбцов, индексы псевдонимы 141
Коммерческие лицензии 104
Синтаксис оператора DROP TABLE 164
mysql_field_seek() 100
mysqlimport, импорт данных из текстовых файлов 316
 


  Категории
Общая информация 73
Установка MySQL 78
Учебное пособие по MySQL 33
Администрирование баз данных 98
Оптимизация в MySQL 41
Справочник по языку MySQL 75
Типы таблиц MySQL 55
Интерфейсы для MySQL 89
Расширение MySQL 18
Проблемы и распространенные ошибки 33
Привнесенные программы 6
Перенос на другие системы 15
 

  Теги
 

  Лучшее на сайте
Сравнение возможностей MySQL и PostgreSQL 442
Адаптивный хешированный индекс 381
Синтаксис оператора EXPLAIN (получение информации о SELECT) 330
Функции даты и времени 319
mysqlimport, импорт данных из текстовых файлов 316
Основные возможности MySQL 313
Запуск MySQL на Windows NT, 2000 или XP 305
Что представляет собой компания MySQL AB? 299
Типы данных DATETIME, DATE и TIMESTAMP 291
Использование символических ссылок для таблиц 260
 

  Друзья сайта
 

  Интересное
 

 
Использование материалов только при активной гиперссылке "http://sql-book.net"
Copyright 2008 http://sql-book.net Серия сайтов: "Стань умным!".