Mysql
 sql >> Database >  >> RDS >> Mysql

Come impedire l'utilizzo di cifre in una colonna VARCHAR utilizzando mysql?

Stai cercando il CHECK Operatore SQL. Sfortunatamente, questo non è supportato da nessuno dei motori MySQL.

Esiste una soluzione alternativa, tuttavia, utilizzando i trigger SQL. Puoi trovare maggiori informazioni su Il vincolo CHECK in MySQL è non funziona e http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html

Quindi, per me (è richiesto MySQL 5.5+), il seguente snipplet ha funzionato:

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');

L'ultimo INSERT l'istruzione ha generato un Error Code: 1644. Invalid username containing only digits mentre

insert into `test`.`user` values(1, 'a1234');

è stato inserito correttamente.

NB:Alcuni complimenti anche per Throw un errore in un trigger MySQL sul signal idea.

Nota che questo esempio protegge solo da INSERT S. Se vuoi essere sicuro, devi anche implementare un trigger su UPDATE .