Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zapobiec używaniu cyfr w kolumnie VARCHAR przy użyciu mysql?

Szukasz CHECK Operator SQL. Niestety ten nie jest obsługiwany przez żaden z silników MySQL.

Istnieje jednak obejście tego problemu, wykorzystując wyzwalacze SQL. Więcej informacji można znaleźć pod adresem SPRAWDŹ ograniczenie w MySQL jest nie działa i http://dev.mysql.com/doc/ refman/5.7/en/create-trigger.html

Tak więc dla mnie (wymagany MySQL 5.5+) działał następujący 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');

Ostatnia INSERT instrukcja podniosła Error Code: 1644. Invalid username containing only digits podczas

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

został prawidłowo włożony.

NB:Niektóre pochwały również dla Rzut błąd w wyzwalaczu MySQL na signal pomysł.

Zauważ, że ten przykład chroni tylko przed INSERT s. Jeśli chcesz być bezpieczny, musisz również zaimplementować wyzwalacz w 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. Przenieś dane z jednej tabeli MySQL do drugiej

  2. Jak przekazać wycinek [] do warunku IN w przygotowanej instrukcji SQL również z warunkami innymi niż IN?

  3. Jak wymusić integralność referencyjną w dziedziczeniu jednotabelowym?

  4. Zaktualizuj kolumnę w MySQL

  5. mysql error 1364 Pole nie ma wartości domyślnych