programing

MySQL이 NOT NULL 열을 추가합니다.

sourcejob 2022. 10. 15. 09:55
반응형

MySQL이 NOT NULL 열을 추가합니다.

테이블에 열을 추가하고 있습니다.

ALTER TABLE t ADD c varchar(10) NOT NULL;

열이 추가되고 각 레코드에는 빈 문자열이 있습니다.

MySQL 5.5+에서는 모든 조건(엄격한 모드 등)에서 이 방식으로 작동합니까?

MySQL에서 각 열 유형에는 "암묵적인 기본값"이 있습니다.

string type [ implicit ]의 경우 기본값은 빈 문자열입니다.

NOT NULL 열이 테이블에 추가되고 명시적 DEFAULT가 지정되지 않은 경우 암묵적인 기본값이 새 열 데이터에1 사용됩니다.DEFAULT 값이 지정된 경우에도 동일한 규칙이 적용됩니다.

따라서 원래 DDL의 결과는 다음과 같습니다.

-- After this, data will be the same, but schema has an EXPLICIT DEFAULT
ALTER TABLE t ADD c varchar(10) NOT NULL DEFAULT ''
-- Now we're back to the IMPLICIT DEFAULT (MySQL stores NULL internally)
ALTER TABLE t ALTER c DROP DEFAULT

"strict" 모드 설정은 기본값에 의존하는 DML 문에 영향을 미치지만 열이 추가될 때 암묵적인 기본값 사용에는 영향을 주지 않습니다.

명시적인 DEFAULT 절이 없는 NOT NULL 열에 데이터를 입력할 경우 INSERT 또는 REPLACE 문에 컬럼 값이 포함되지 않은 경우 [및] strict SQL 모드가 활성화되어 있는 경우 오류가 발생합니다.

여기 ALTER TABLE에는 strict 모드가 적용되지 않는 sqlfiddle "proof"있습니다.ADD 문


1 이것은 MySQL 기능입니다.SQL Server와 같은 다른 엔진에서는 이러한 스키마 변경에 대해 명시적인 DEFAULT(또는 NULL 열) 제약이 필요합니다.

언급URL : https://stackoverflow.com/questions/22868345/mysql-add-a-not-null-column

반응형