sql >> Databáze >  >> RDS >> Mysql

Jak zabránit použití číslic ve sloupci VARCHAR pomocí mysql?

Hledáte CHECK SQL operátor. Bohužel tento není podporován žádným z motorů MySQL.

Existuje však řešení pomocí spouštěčů SQL. Další informace můžete najít na CHECK omezení v MySQL je nefunguje a http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html

Takže pro mě (vyžadováno MySQL 5.5+) fungoval následující úryvek:

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

Poslední INSERT příkaz vyvolal Error Code: 1644. Invalid username containing only digits zatímco

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

byl správně vložen.

Poznámka:Některé chvály také Throw chyba ve spouštěči MySQL na signal nápad.

Všimněte si, že tento příklad chrání pouze před INSERT s. Pokud chcete být v bezpečí, musíte také implementovat spouštěč na UPDATE .



  1. MySQL SHA() nefunguje

  2. MySQL - Counter ve skupině

  3. Datumové podmínky pomocí vyhledávací logiky

  4. Mohly by se simultánní transakce vzájemně rušit? php/mysql