sql >> Database teknologi >  >> RDS >> Mysql

Hvordan forhindrer man brug af cifre i en VARCHAR kolonne ved hjælp af mysql?

Du leder efter CHECK SQL-operatør. Desværre understøttes denne ikke af nogen af ​​MySQL-motorerne.

Der er dog en løsning ved at gøre brug af SQL-triggere. Du kan finde flere oplysninger på CHECK begrænsning i MySQL er virker ikke og http://dev.mysql.com/doc/ refman/5.7/da/create-trigger.html

Så for mig (MySQL 5.5+ påkrævet), virkede følgende snipplet:

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

Den sidste INSERT statement rejste en Error Code: 1644. Invalid username containing only digits mens

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

var indsat korrekt.

NB:Nogle roser også til Skast en fejl i en MySQL-udløsersignal idé.

Bemærk, at dette eksempel kun beskytter mod INSERT s. Hvis du vil være sikker, skal du også implementere en trigger på UPDATE .



  1. Sådan løses denne dataopdateringsfejl i Laravel

  2. (Postgresql) få tabeludløserfunktion til at indsætte ID-værdi for ændret række i logtabel, til tilpasset replikering

  3. Afkort tabel inden for transaktion

  4. Sådan øges intervaldatoen på Mysql