Spec-Zone .ru
спецификации, руководства, описания, API
|
В MySQL, InnoDB
табличная проверка поддержки ограничений внешнего ключа. См. Раздел
14.2," InnoDB
Механизм хранения", и Раздел
1.8.5.4, "Различия во Внешнем ключе".
Ограничение внешнего ключа не требуется просто присоединиться к двум таблицам. Для механизмов хранения кроме
InnoDB
, возможно, определяя столбец использовать a REFERENCES
пункт, который не имеет никакого фактического
эффекта, и служит только в качестве записки или комментария Вам что столбец, который
Вы в настоящий момент определяете, предназначается, чтобы обратиться к столбцу в другой таблице.
Чрезвычайно важно понять при использовании этого синтаксиса что:tbl_name
(col_name
)
MySQL не выполняет вида CHECK
удостовериться это col_name
фактически существует в tbl_name
(или даже это tbl_name
непосредственно существует).
MySQL не выполняет вида действия на tbl_name
такой как удаление строк в ответ на действия, взятые
строки в таблице, которую Вы определяете; другими словами этот синтаксис вызывает нет ON DELETE
или ON UPDATE
поведение вообще.
(Хотя можно записать ON DELETE
или ON UPDATE
пункт как часть REFERENCES
пункт, это также игнорируется.)
Этот синтаксис создает столбец; это не создает вида, индексируют или ключ.
Можно использовать столбец столь создаваемый как объединяющий столбец, как показано здесь:
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 person(id), PRIMARY KEY (id));INSERT INTO person VALUES (NULL, 'Antonio Paz');SELECT @last := LAST_INSERT_ID();INSERT INTO shirt VALUES(NULL, 'polo', 'blue', @last),(NULL, 'dress', 'white', @last),(NULL, 't-shirt', 'blue', @last);INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');SELECT @last := LAST_INSERT_ID();INSERT INTO shirt VALUES(NULL, 'dress', 'orange', @last),(NULL, 'polo', 'red', @last),(NULL, 'dress', 'blue', @last),(NULL, 't-shirt', 'white', @last);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 INNER JOIN shirt s ON s.owner = p.id WHERE p.name LIKE 'Lilliana%' AND s.color <> 'white';+----+-------+--------+-------+| id | style | color | owner |+----+-------+--------+-------+| 4 | dress | orange | 2 || 5 | polo | red | 2 || 6 | dress | blue | 2 |+----+-------+--------+-------+
Когда использующийся этим способом, REFERENCES
пункт не выводится на экран в выводе
SHOW CREATE TABLE
или DESCRIBE
:
SHOW CREATE TABLE shirt\G*************************** 1. row ***************************Table: shirtCreate Table: CREATE TABLE `shirt` (`id` smallint(5) unsigned NOT NULL auto_increment,`style` enum('t-shirt','polo','dress') NOT NULL,`color` enum('red','blue','orange','white','black') NOT NULL,`owner` smallint(5) unsigned NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1
Использование REFERENCES
таким образом как комментарий или "напоминание" в определении столбца работает с
MyISAM
таблицы.