Как дать ограничение проверки на ссылочной таблице внешнего ключа, MySQL? - PullRequest
0 голосов
/ 12 сентября 2011
Table: User

     uid = Integer

     superuser = Boolean
Table: Group

     gid = Integer

     grpname = String


Table: User_Group_Rel 

       uid: ForeigneKey(User)

       gid: ForeignKey(Group) 

       CONSTRAINT check1 CHECK (uid.superuser != False),  

когда я вставляю данные в реляционную таблицу, это не вызывает исключения из ограничения

1 Ответ

2 голосов
/ 12 сентября 2011

К сожалению, MySQL не применяет проверочные ограничения. Он анализирует объявления проверки ограничений, но молча игнорирует их. Он даже не выдает предупреждение, что делает это.

См. http://dev.mysql.com/doc/refman/5.1/en/create-table.html:

Предложение CHECK анализируется, но игнорируется всеми механизмами хранения.

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

  • Объявите столбец как ENUM, содержащий только те значения, которые вы хотите разрешить.

  • Определите FOREIGN KEY, чтобы сделать ссылку на столбец справочной таблицей, содержащей только те значения, которые вы хотите разрешить.

  • Напишите TRIGGER в поле BEFORE INSERT и PEFORE UPDATE, чтобы изменить значение или вызвать исключение (для этого требуется дополнительная хитрость до MySQL 5.5).

...