sql >> Database >  >> RDS >> Mysql

Hoe voorkom je het gebruik van cijfers in een VARCHAR-kolom met mysql?

U zoekt de CHECK SQL-operator. Helaas wordt deze door geen van de MySQL-engines ondersteund.

Er is echter een tijdelijke oplossing door gebruik te maken van SQL-triggers. U kunt meer informatie vinden op CHECK-beperking in MySQL is werkt niet en http://dev.mysql.com/doc/ refman/5.7/nl/create-trigger.html

Dus voor mij (MySQL 5.5+ vereist), werkte het volgende fragment:

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

De laatste INSERT statement leverde een Error Code: 1644. Invalid username containing only digits terwijl

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

correct was geplaatst.

NB:ook een pluim voor Gooien een fout in een MySQL-trigger op het signal idee.

Merk op dat dit voorbeeld alleen beschermt tegen INSERT s. Als je veilig wilt zijn, moet je ook een trigger implementeren op UPDATE .



  1. Hoe alle tabelnamen van een bepaalde mysql-database in php . weer te geven

  2. Hoe R MySQL verbinden of hoe RMySQL-pakket installeren?

  3. Waarom zijn dubbel geneste NOT EXISTS-instructies onvermijdelijk in SQL?

  4. Postgres - MAAK TABEL UIT SELECT