CHECK
を探しています SQL演算子。残念ながら、これはどのMySQLエンジンでもサポートされていません。
ただし、SQLトリガーを使用することで回避策があります。詳細については、MySQLのCHECK制約を参照してください。動作しない
および
したがって、私にとって(MySQL 5.5以降が必要)、次のスニペットが機能しました:
use test;
CREATE TABLE user (
`user_id` INT NOT NULL,
`username` VARCHAR(50) NULL,
PRIMARY KEY (`id`)
);
delimiter //
create trigger trg_trigger_test_ins before insert on user
for each row
begin
if new.username REGEXP '^[0-9]*$' then
signal sqlstate '45000' set message_text = 'Invalid username containing only digits';
end if;
end
//
delimiter ;
insert into user values(1, '1234');
最後のINSERT
ステートメントはError Code: 1644. Invalid username containing only digits
insert into `test`.`user` values(1, 'a1234');
正しく挿入されました。
注意: Throw MySQLトリガーのエラー
signal
で アイデア。
この例はINSERT
に対してのみ保護することに注意してください s。安全を確保したい場合は、UPDATE
にトリガーを実装する必要もあります。 。