sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo evitar el uso de dígitos en una columna VARCHAR usando mysql?

Estás buscando el CHECK operador SQL. Desafortunadamente, este no es compatible con ninguno de los motores de MySQL.

Sin embargo, existe una solución al hacer uso de activadores de SQL. Puede encontrar más información en La restricción CHECK en MySQL es no funciona y http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html

Entonces, para mí (se requiere MySQL 5.5+), el siguiente fragmento funcionó:

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

El último INSERT La declaración generó un Error Code: 1644. Invalid username containing only digits mientras

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

se insertó correctamente.

NB:Algunas felicitaciones también a Throw un error en un disparador de MySQL en la signal idea.

Tenga en cuenta que este ejemplo solo protege contra INSERT s. Si quiere estar seguro, también necesita implementar un disparador en UPDATE .