Vous recherchez le CHECK
Opérateur SQL. Malheureusement, celui-ci n'est pris en charge par aucun des moteurs MySQL.
Il existe cependant une solution de contournement en utilisant des déclencheurs SQL. Vous pouvez trouver plus d'informations sur la contrainte CHECK dans MySQL est ne fonctionne pas et http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html
Donc, pour moi (MySQL 5.5+ requis), l'extrait de code suivant a fonctionné :
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');
Le dernier INSERT
l'instruction a généré un Error Code: 1644. Invalid username containing only digits
tandis que
insert into `test`.`user` values(1, 'a1234');
a été inséré correctement.
NB :Quelques félicitations également à Throw une erreur dans un déclencheur MySQL
sur le signal
idée.
Notez que cet exemple ne protège que contre INSERT
s. Si vous voulez être sûr, vous devez également implémenter un déclencheur sur UPDATE
.