반응형
    
    
    
  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
반응형
    
    
    
  'programing' 카테고리의 다른 글
| 문자열에서 텍스트를 제거하려면 어떻게 해야 합니까? (0) | 2022.10.15 | 
|---|---|
| mysql GROUP_CONCAT 중복 (0) | 2022.10.15 | 
| PHP의 특정 인덱스에서 foreach 루프를 시작하는 방법 (0) | 2022.10.15 | 
| python을 사용하여 MD5의 합계를 얻는 방법 (0) | 2022.10.15 | 
| Vuex에서 Axios 요청이 성공한 후 알림 표시 (0) | 2022.10.14 |