Du letar efter CHECK
SQL-operator. Tyvärr stöds inte denna av någon av MySQL-motorerna.
Det finns dock en lösning genom att använda SQL-triggers. Du kan hitta mer information på KONTROLLERA begränsningen i MySQL är fungerar inte och http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html
Så för mig (MySQL 5.5+ krävs) fungerade följande kodavsnitt:
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 sista INSERT
uttalande gav en Error Code: 1644. Invalid username containing only digits
medan
insert into `test`.`user` values(1, 'a1234');
satt in på rätt sätt.
OBS:Lite beröm också till Kasta ett fel i en MySQL-utlösare
på signal
idé.
Observera att detta exempel endast skyddar mot INSERT
s. Om du vill vara säker måste du också implementera en trigger på UPDATE
.