Szukasz CHECK
Operator SQL. Niestety ten nie jest obsługiwany przez żaden z silników MySQL.
Istnieje jednak obejście tego problemu, wykorzystując wyzwalacze SQL. Więcej informacji można znaleźć pod adresem SPRAWDŹ ograniczenie w MySQL jest nie działa i http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html
Tak więc dla mnie (wymagany MySQL 5.5+) działał następujący fragment:
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');
Ostatnia INSERT
instrukcja podniosła Error Code: 1644. Invalid username containing only digits
podczas
insert into `test`.`user` values(1, 'a1234');
został prawidłowo włożony.
NB:Niektóre pochwały również dla Rzut błąd w wyzwalaczu MySQL
na signal
pomysł.
Zauważ, że ten przykład chroni tylko przed INSERT
s. Jeśli chcesz być bezpieczny, musisz również zaimplementować wyzwalacz w UPDATE
.