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
.