U zoekt de CHECK
SQL-operator. Helaas wordt deze door geen van de MySQL-engines ondersteund.
Er is echter een tijdelijke oplossing door gebruik te maken van SQL-triggers. U kunt meer informatie vinden op CHECK-beperking in MySQL is werkt niet en http://dev.mysql.com/doc/ refman/5.7/nl/create-trigger.html
Dus voor mij (MySQL 5.5+ vereist), werkte het volgende 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');
De laatste INSERT
statement leverde een Error Code: 1644. Invalid username containing only digits
terwijl
insert into `test`.`user` values(1, 'a1234');
correct was geplaatst.
NB:ook een pluim voor Gooien een fout in een MySQL-trigger
op het signal
idee.
Merk op dat dit voorbeeld alleen beschermt tegen INSERT
s. Als je veilig wilt zijn, moet je ook een trigger implementeren op UPDATE
.