Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment empêcher l'utilisation de chiffres dans une colonne VARCHAR à l'aide de mysql ?

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 .