ПРОВЕРЬТЕ mysql не работает (без ошибок) - PullRequest
0 голосов
/ 01 марта 2010
CREATE TABLE batsman
(
  InningId int NOT NULL,
  PlayerId int NOT NULL,
  BatsmanOrder int(2) NOT NULL,
  BatScore int NOT NULL default 0,
  Balls int NOT NULL default 0,
  sixes int NOT NULL default 0,
  fours int NOT NULL default 0,
  `out` varchar(10) NOT NULL, /*Foreign*/
  catcher int, /*Foreign*/
  bowler int, /*Foreign*/
  Primary Key(InningId, PlayerId),
  Foreign Key (PlayerId) references player(Id),
  Foreign Key (InningId) references inning(Id),
  CHECK (`out` in ("Caught", "Run Out", "Not Out", "Bowled", "lbw"))
  ) ENGINE=INNODB;

Я использую MySql и не могу заставить свой Check работать, кажется, он просто не работает, я не получаю ошибку или что-то еще Это может быть как-то связано с тегами '', так как out - ключевое слово!

Ответы [ 2 ]

2 голосов
/ 01 марта 2010

Цитирование 12.1.17. CREATE TABLE Синтаксис руководства MySQL:

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

Может быть, это объясняет это?


Чисто в качестве предложения, возможно, возможное решение для вас будет использовать либо:

  • 10.4.4. Тип ENUM для вашего столбца, если он должен содержать только несколько значений - обратите внимание, что у этого подхода есть недостатки, поскольку перечисление не совсем работает, как varchar.
  • a Триггер для предотвращения вставки неверных данных

Но это просто дикие предположения , которые я не проверял в такой ситуации .

0 голосов
/ 01 марта 2010

MySQL не поддерживает проверочные ограничения.

Вместо этого вы можете использовать триггер для проверки. Вот пример: http://forge.mysql.com/wiki/Triggers#Emulating_Check_Constraints

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...