에서이 질문나는 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 <> '')
유감스럽게도 MySQL은 제약 조건에 대한 지원이 제한되어 있습니다. 에서MySQL 레퍼런스 매뉴얼:
CHECK 절은 구문 분석되지만 모든 저장소 엔진에서는 무시됩니다.
그래서 당신이트리거사람들이 지적한대로 해결 방법으로
앞으로는PostgreSQL 살펴보기이는 데이터 무결성을보다 잘 지원한다고 간주됩니다 (다른 것들)에 의해많은 사람.
공백 문자 삽입을 방지하기 위해 트리거를 사용할 수 있습니다.
빠르지 않고 간결하지도 않고 예쁘지도 않지만 ...
예:
표 만들기 :
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)