Sie suchen nach dem CHECK
SQL-Operator. Leider wird dieser von keiner der MySQL-Engines unterstützt.
Es gibt jedoch eine Problemumgehung, indem SQL-Trigger verwendet werden. Weitere Informationen finden Sie unter CHECK-Einschränkung in MySQL ist funktioniert nicht und http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html
Also, für mich (MySQL 5.5+ erforderlich) hat das folgende Snipplet funktioniert:
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');
Das letzte INSERT
-Anweisung hat einen Error Code: 1644. Invalid username containing only digits
während
insert into `test`.`user` values(1, 'a1234');
richtig eingesetzt wurde.
NB:Einige Kudos auch für Throw ein Fehler in einem MySQL-Trigger
auf dem signal
Idee.
Beachten Sie, dass dieses Beispiel nur vor INSERT
schützt s. Wenn Sie auf Nummer sicher gehen möchten, müssen Sie auch einen Trigger auf UPDATE
implementieren .