Você está procurando o
CHECK
Operador SQL. Infelizmente, este não é suportado por nenhum dos mecanismos do MySQL. Há uma solução alternativa, porém, fazendo uso de gatilhos SQL. Você pode encontrar mais informações em CHECK constraint in MySQL is não funciona e http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html
Portanto, para mim (necessário MySQL 5.5+), o seguinte snippet funcionou:
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');
O último
INSERT
declaração gerou um Error Code: 1644. Invalid username containing only digits
enquanto insert into `test`.`user` values(1, 'a1234');
foi inserido corretamente.
NB:Alguns elogios também para Throw um erro em um gatilho MySQL no
signal
idéia. Observe que este exemplo protege apenas contra
INSERT
s. Se você quer estar seguro, você também precisa implementar um gatilho em UPDATE
.