最初のmysqlスクリプトを作成していて、列'type'のテーブルを作成したいと思います。可能な値は「XYZ」と「ABC」の2つだけである必要があるため、次のようにしました。
CREATE TABLE table(
type varchar(12) NOT NULL,
CHECK (type = 'XYZ' or type = 'ABC');
しかし、234や「John」などの値をテストして挿入すると、機能し、エラーは返されません。値「ジョン」を挿入するべきではないと思いますよね?
MySQLはチェック制約をサポートしていません。
The CHECK clause is parsed but ignored by all storage engines.
そのため、このcheck
ステートメントはエラーを発生させませんが、暗黙のうちに無視されます。
enum
代わりに次を使用します。
CREATE TABLE test(
type ENUM('XYZ', 'ABC')
);
この SQL フィドルを参照してください。挿入を 'John' に変更してみると、エラーが発生します。
MYSQLにはチェックがないようです....
http://bugs.mysql.com/bug.php?id=25660
http://blog.christosoft.de/2012/08/mysql-check-constraint/
http://forums.mysql.com/read.php?136,572271,572603#msg-572603
トリガーを試すことができます。