Du leder efter CHECK
SQL-operatør. Desværre understøttes denne ikke af nogen af MySQL-motorerne.
Der er dog en løsning ved at gøre brug af SQL-triggere. Du kan finde flere oplysninger på CHECK begrænsning i MySQL er virker ikke og http://dev.mysql.com/doc/ refman/5.7/da/create-trigger.html
Så for mig (MySQL 5.5+ påkrævet), virkede følgende snipplet:
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');
Den sidste INSERT
statement rejste en Error Code: 1644. Invalid username containing only digits
mens
insert into `test`.`user` values(1, 'a1234');
var indsat korrekt.
NB:Nogle roser også til Skast en fejl i en MySQL-udløser
på signal
idé.
Bemærk, at dette eksempel kun beskytter mod INSERT
s. Hvis du vil være sikker, skal du også implementere en trigger på UPDATE
.