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
.