programing

MySQL에서 빈 문자열 삽입을 금지하는 제약 조건

iphone6s 2023. 9. 4. 19:37
반응형

MySQL에서 빈 문자열 삽입을 금지하는 제약 조건

이 질문에서는 NULL 값의 삽입을 방지하는 방법을 배웠습니다.하지만 안타깝게도 빈 문자열이 삽입되고 있습니다.PHP 측에서 이를 방지하는 것 외에도 데이터베이스 제약과 같은 것을 사용하여 이를 방지하고 싶습니다.물론 지원서 쪽의 확인이 필요하지만, 양쪽 모두로 해주셨으면 합니다.

저는 어떤 애플리케이션이 여러분의 데이터베이스와 통신하든 기본적으로 잘못된 데이터를 삽입할 수 없어야 한다고 배웠습니다.그래서...

CREATE TABLE IF NOT EXISTS tblFoo (
  foo_id int(11) NOT NULL AUTO_INCREMENT,
  foo_test varchar(50) NOT NULL,
  PRIMARY KEY (foo_id)
);

여전히 이 삽입을 허용합니다.

INSERT INTO tblFoo (foo_test) VALUES ('');

제가 예방하고 싶은 것입니다.

일반적으로 CHECK 제약 조건을 사용하여 이 작업을 수행합니다.

foo_test VARCHAR(50) NOT NULL CHECK (foo_test <> '')

버전 8.0 이전의 MySQL은 제한된 제약 조건을 지원했습니다.MySQL 참조 매뉴얼:

CHECK 절은 구문 분석되지만 모든 스토리지 엔진에서 무시됩니다.

이전 버전을 고수해야 하는 경우 사람들이 지적한 대로 해결 방법으로 트리거를 사용합니다.

나중에 Postgre를 살펴보실 도 있습니다.SQL많은 사람들이 데이터 무결성을 더 잘 지원하는 것으로 간주합니다.

트리거를 사용하여 빈 문자열이 삽입되지 않도록 할 수 있습니다.

빠르지도 않고, 간결하지도 않고, 예쁘지도 않지만, 하지만...

예:

  1. 테이블 만들기:

    mysql> create table yar (val VARCHAR(25) not null);
    Query OK, 0 rows affected (0.02 sec)
    
  2. 빈 문자열을 확인하고 허용하지 않으려면 '삽입 전' 트리거를 만듭니다.

    mysql> delimiter $
    
    mysql> create trigger foo before insert on yar
        -> for each row
        -> begin
        -> if new.val = '' then
        -> signal sqlstate '45000';
        -> end if;
        -> end;$
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> delimiter ;
    
  3. 열에 null 및 빈 문자열을 삽입해 보십시오.

    mysql> insert into yar values("");
    ERROR 1644 (45000): Unhandled user-defined exception condition
    
    mysql> insert into yar values(NULL);
    ERROR 1048 (23000): Column 'val' cannot be null
    
    mysql> insert into yar values ("abc");
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from yar;
    +-----+
    | val |
    +-----+
    | abc |
    +-----+
    1 row in set (0.00 sec)
    

언급URL : https://stackoverflow.com/questions/2514178/a-constraint-to-prevent-the-insert-of-an-empty-string-in-mysql

반응형