sql >> Databasteknik >  >> RDS >> Mysql

Hur förhindrar man att man använder siffror i en VARCHAR-kolumn med mysql?

Du letar efter CHECK SQL-operator. Tyvärr stöds inte denna av någon av MySQL-motorerna.

Det finns dock en lösning genom att använda SQL-triggers. Du kan hitta mer information på KONTROLLERA begränsningen i MySQL är fungerar inte och http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html

Så för mig (MySQL 5.5+ krävs) fungerade följande kodavsnitt:

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 sista INSERT uttalande gav en Error Code: 1644. Invalid username containing only digits medan

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

satt in på rätt sätt.

OBS:Lite beröm också till Kasta ett fel i en MySQL-utlösaresignal idé.

Observera att detta exempel endast skyddar mot INSERT s. Om du vill vara säker måste du också implementera en trigger på UPDATE .



  1. Skapa databas med hjälp av en lagrad funktion

  2. Hur man pausar exekveringen av ett uttalande i PostgreSQL

  3. Entity Data Model Wizard Crash med Oracle Connection

  4. Antal gånger värde visas i en viss kolumn i MySQL