質問 |
||
| 質問者:sweepea | MySQLのCHECK制約がうまくいきません。 | |
|---|---|---|
困り度:
|
scoreカラムに1から100までの整数しか入らないようにするには どうしたらいいですか? MySQLのバージョンは、5.0.51 です。 以下の文は、なんのエラーもなく、INSERTされてしまいます。 CREATE TABLE scores ( score INT NOT NULL, CHECK ( score BETWEEN 1 AND 100 ) ) ENGINE = InnoDB; INSERT INTO scores (score) VALUES (1000); どう書けばいいのでしょうか? もしくは、MySQLのCHECK制約について詳しく書かれたページはないでしょうか? |
|
質問投稿日時:08/03/29 10:38 質問番号:3904216 |
||
回答 |
|
| 回答者:chukenkenkou | MySQLは、「標準SQL準拠」や「他のRDBMSとの文法上の互換性維持」のため、「文法エラーにはならないが、機能は働かない」といったパターンがあります。 CHECKもそうですし、例えば「primary key(c1 asc,c2 desc)」といったインデクス構成列の昇順と降順の混在も、エラーにはならないですが、実際はすべて昇順で定義されたりします。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/01 02:07 回答番号:No.3 |
|
| この回答へのお礼 | ありがとうございます。 > 文法エラーにはならないが、機能は働かない いちばん、困りますよね。やはりそうだったんですか。 今回は、1〜100までの値を持った別テーブルを作って、 外部キーでそこを参照させる形をとりました。 ありがとうございました。 |
回答良回答10pt |
|
| 回答者:masa6272 | MySQLは、文法的に合ってればできないことを指定しても文句を言わない傾向がありますね。 CHECK制約は効かなくても、5.0でもトリガーで実現はできます。 面倒ですが・・・ |
|---|---|
| 種類:アドバイス どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/03/30 09:32 回答番号:No.2 |
|
| 参考URL: | http://dev.mysql.com/doc/refman/5.1/ja/triggers.html |
| この回答へのお礼 | ありがとうございます。 MySQL依存ですが、ENUMやSETという型でも実現できそうですね。 今回は、1〜100までの値を持った別テーブルを作って、 外部キーでそこを参照させる形をとりました。 ありがとうございました。 |
回答良回答20pt |
|
| 回答者:auty | MySQLのバージョン5.0.51ではどうなのでしょうか。 以下のページを参考にしてみてください。 http://www.buena-idea.net/~hironobu/mysql/m-1-02.html 注1: 現在のところ、整合性(CHECK)制約はサポートされていません。 |
|---|---|
| 種類:アドバイス どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/03/29 11:54 回答番号:No.1 |
|
| この回答へのお礼 | おっと、そうだったんですね・・・。 私が見ていたリファレンスはよく見ると、5.1 でした。残念です。 http://dev.mysql.com/doc/refman/5.1/ja/create-table.html どうもありがとうございました。 (サポートしていないなら、エラーメッセージを返して欲しいですね。) |