Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como evitar o uso de dígitos em uma coluna VARCHAR usando mysql?


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 .