MySQL の check によるデータの制約を確認します。
以下は test_check_01 テーブルで、num が 1 <= num <= 10、str の文字列長 <= 5 の制約を設定しています。
■テーブル定義・データ登録
■check の条件の確認
以下は test_check_01 テーブルで、num が 1 <= num <= 10、str の文字列長 <= 5 の制約を設定しています。
■テーブル定義・データ登録
create table test_check_01 ( id varchar(32) not null, num integer not null, str varchar(8), primary key(id), check(num >= 1 and num <= 10), check(char_length(str) <= 5) ); insert into test_check_01 (id, num, str) values ('id_1', 1, 'abc'); insert into test_check_01 (id, num, str) values ('id_2', 2, 'def'); insert into test_check_01 (id, num, str) values ('id_3', 3, 'ghi');
■check の条件の確認
mysql> select * from test_check_01; +------+-----+------+ | id | num | str | +------+-----+------+ | id_1 | 1 | abc | | id_2 | 2 | def | | id_3 | 3 | ghi | +------+-----+------+ mysql> update test_check_01 set num = num * 4;; ERROR 3819 (HY000): Check constraint 'test_check_01_chk_1' is violated. mysql> select * from test_check_01; +------+-----+------+ | id | num | str | +------+-----+------+ | id_1 | 1 | abc | | id_2 | 2 | def | | id_3 | 3 | ghi | +------+-----+------+ mysql> update test_check_01 set str = concat(str, '___'); ERROR 3819 (HY000): Check constraint 'test_check_01_chk_2' is violated. mysql> select * from test_check_01; +------+-----+------+ | id | num | str | +------+-----+------+ | id_1 | 1 | abc | | id_2 | 2 | def | | id_3 | 3 | ghi | +------+-----+------+ 3 rows in set (0.00 sec)