В качестве ответа Немодена вы должны использовать InnoDB, а не MyISAM.
Я использую MySQL, и я хотел прокомментировать ошибку, с которой я столкнулся, следуя инструкциям на этой странице.Может быть, другие новички могут извлечь из этого пользу.
Насколько я могу сказать:
a) MySQL поддерживает различные «механизмы хранения» для таблиц.Это, по-видимому, хорошая вещь.Однако не все механизмы поддерживают ограничения ссылок.
b) Чтобы таблица MySQL поддерживала ограничение «ссылки», она должна иметь тип InnoDB.В моей установке (в SuSE Linux, прямо из стандартного двоичного пакета RPM), это , а не по умолчанию.Таким образом, вы должны либо изменить конфигурацию сервера, чтобы сделать это по умолчанию, либо указать «ENGINE = InnoDB» после закрывающей скобки в определении таблицы.
c) Даже для InnoDB синтаксис, описанный Филом выше, делаетне работает, хотя не отклонено, просто проигнорировано .Согласно руководству, это фактически просто комментарий для разработчика о том, что этот столбец должен ссылаться на другой столбец, даже если ограничение не применяется mysql.
d) Итак,единственный способ заставить этот тип ограничения работать: 1. сделать таблицу InnoDB и 2. использовать формат «FOREIGN KEY (email) REFERENCES mailing_list (email)» в качестве отдельной записи внутри определения таблицы.
[MySQL даже не предупредит!Даже не напоминание о том, что такие ссылочные предложения являются просто «комментариями».Он просто с радостью проигнорирует их и допустит любое старое значение в этом ряду.Тьфу.]
-- Antonio Ramirez, March 19, 2007