Търсите CHECK
SQL оператор. За съжаление, този не се поддържа от никоя от MySQL машините.
Има обаче заобиколно решение, като се използват SQL тригери. Може да намерите повече информация на Ограничението CHECK в MySQL е не работи и http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html
И така, за мен (изисква се 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');
беше поставен правилно.
NB:Някои похвали и за Throw грешка в MySQL тригер
на signal
идея.
Имайте предвид, че този пример защитава само срещу INSERT
с. Ако искате да сте в безопасност, трябва също така да внедрите тригер на UPDATE
.