Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да предотвратите използването на цифри в колона VARCHAR с помощта на mysql?

Търсите CHECK SQL оператор. За съжаление, този не се поддържа от никоя от MySQL машините.

Има обаче заобиколно решение, като се използват SQL тригери. Може да намерите повече информация на Ограничението CHECK в MySQL е не работи и http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html

И така, за мен (изисква се MySQL 5.5+), следният фрагмент работи:

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

Последният INSERT изявление повдигна Error Code: 1644. Invalid username containing only digits докато

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

беше поставен правилно.

NB:Някои похвали и за Throw грешка в MySQL тригер на signal идея.

Имайте предвид, че този пример защитава само срещу INSERT с. Ако искате да сте в безопасност, трябва също така да внедрите тригер на UPDATE .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете блог в PHP и MySQL база данни - Admin Posts

  2. SQL JOIN като единичен ред с дъщерни стойности като колони и възможност за ПОРЪЧКА ПО стойност на дъщерна връзка

  3. Копирайте данни от една таблица в друга със специфични условия

  4. Mysql избира редове за превключване за всяко изпълнение

  5. sql таблица за самоприсъединяване премахва дублиращи се редове