Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verhindert man die Verwendung von Ziffern in einer VARCHAR-Spalte mit mysql?

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 .