2010-03-01 5 views
0
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 работать, кажется, просто не будет работать я не получаю ошибку или что-нибудь. Это может быть связано с тегами '' вокруг, так как это ключевое слово!ПРОВЕРКИ MySQL не работает (нет ошибки)

ответ

2

Цитируя 12.1.17. CREATE TABLE Syntax в руководстве MySQL:

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

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


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

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

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

+1

Возможно, ссылка на другую таблицу с первичным ключом varchar, содержащим список допустимых значений. – Martin

+0

Вот почему я избегаю использования MySQL каждый раз, когда могу. Они, как известно, плохо поддерживают стандартный SQL. PostgreSQL намного лучше в этом отношении (http://www.postgresql.org/). – FelixM

Смежные вопросы