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은 많은 사람들이 데이터 무결성을 더 잘 지원하는 것으로 간주합니다.
트리거를 사용하여 빈 문자열이 삽입되지 않도록 할 수 있습니다.
빠르지도 않고, 간결하지도 않고, 예쁘지도 않지만, 하지만...
예:
테이블 만들기:
mysql> create table yar (val VARCHAR(25) not null); Query OK, 0 rows affected (0.02 sec)빈 문자열을 확인하고 허용하지 않으려면 '삽입 전' 트리거를 만듭니다.
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 ;열에 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
'programing' 카테고리의 다른 글
| 채팅용 DB 스키마? (0) | 2023.09.04 |
|---|---|
| 로컬 라라곤 서버(apache)에서 mariadb를 시작하는 중 오류 발생 (0) | 2023.09.04 |
| Chrome 검색되지 않은 구문 오류:예기치 않은 토큰 불법 (0) | 2023.09.04 |
| 풀링된 연결 시간이 초과되었습니다. (0) | 2023.09.04 |
| Swift를 사용하면 탐색 제목이 표시되지 않는 이유는 무엇입니까?UI? (0) | 2023.09.04 |