11.6 데이터 형 기본값
데이터 형 사양의 DEFAULT
절은 컬럼의 기본값을 보여줍니다. 한 가지 예외가 있습니다. 기본값은 상수 여야가 있으므로, 함수 또는 식을 수 없습니다. 이것은 예를 들어 날짜 컬럼의 기본값으로 value
NOW()
이나 CURRENT_DATE
등의 함수 값을 설정할 수 없다는 것을 의미합니다. 예외는 CURRENT_TIMESTAMP
를 TIMESTAMP
및 DATETIME
컬럼의 기본값으로 지정할 수 있습니다. 섹션 11.3.5 "TIMESTAMP 및 DATETIME 자동 초기화 및 업데이트 기능" 을 참조하십시오.
BLOB
및 TEXT
컬럼에 기본값을 할당 할 수 없습니다.
컬럼 정의에 명시적인 DEFAULT
값이 포함되어 있지 않은 경우, MySQL은 디폴트 값을 다음과 같이 확인합니다.
NULL
을 값으로 취할 수있는 경우, 그 컬럼은 명시적인 DEFAULT NULL
절에서 정의 할 수 있습니다.
NULL
을 값으로 취할 수없는 경우, MySQL은 명시적인 DEFAULT
절에서 컬럼을 정의 할 수 없습니다. 예외 : 컬럼이 PRIMARY KEY
의 일부로 정의되어 있지만 NOT NULL
로 명시 적으로 정의되어 있지 않은 경우, MySQL은 이것을 NOT NULL
컬럼으로 만듭니다 ( PRIMARY KEY
컬럼은 NOT NULL
이어야 이 있으므로)가 암시 적 기본값을 사용하여 이에 DEFAULT
절을 지정합니다. 이를 방지하려면 모든 PRIMARY KEY
컬럼의 정의에 명시 적으로 NOT NULL
을 포함해야합니다.
명시적인 DEFAULT
구가없는 NOT NULL
컬럼에 대한 데이터 항목은 INSERT
또는 REPLACE
문을 열 값을 포함하지 않은 경우 또는 UPDATE
문이 열을 NULL
로 설정하면, MySQL은 그 시점에서 유효한 SQL 모드에 따라 열을 처리합니다.
엄격한 SQL 모드를 활성화하면 트랜잭션 테이블에 오류가 발생하고 문이 롤백됩니다. 비 트랜잭션 테이블에서 오류가 발생할 이것이 여러 줄 문 2 행째 이후의 행에 대한 오류의 경우, 선행하는 행이 삽입되어 있습니다.
엄격 모드가 유효하지 않은 경우, MySQL은 컬럼 데이터 유형의 암시 적 기본값으로 컬럼을 설정합니다.
테이블 t
가 다음과 같이 정의된다고합니다.
CREATE TABLE t (i INT NOT NULL);
이 경우 i
는 명시적인 기본이 없기 때문에 엄격 모드에서는 다음의 각각은 문은 오류가 발생 행은 삽입되지 않습니다. 엄격 모드를 사용하지 않는 경우, 세 번째 문에서만 오류가 발생합니다. 처음 두 개의 문은 암시 적 기본이 삽입되지만, DEFAULT(i)
값을 생성 할 수 없기 때문에 세 번째 문은 실패합니다.
INSERT INTO t VALUES (); INSERT INTO t VALUES (DEFAULT); INSERT INTO t VALUES (DEFAULT (i));
섹션 5.1.7 "서버 SQL 모드" 를 참조하십시오.
소정의 테이블에 대한 SHOW CREATE TABLE
문을 사용하면 어느 컬럼에 명시적인 DEFAULT
절이 있는지를 확인할 수 있습니다.
암시 적 기본값은 다음과 같이 정의됩니다.
수치 형의 기본값은
0
입니다. 그러나 예외로AUTO_INCREMENT
속성에서 선언 된 정수 또는 부동 소수점 형의 기본은 그 시퀀스의 다음 값이됩니다.TIMESTAMP
이외의 날짜 및 시간 형의 기본은 '제로'값이 적절합니다.explicit_defaults_for_timestamp
시스템 변수가 유효한 경우 이것은TIMESTAMP
에도 적용됩니다 ( 섹션 5.1.4 "서버 시스템 변수" 를 참조하십시오). 그렇지 않으면 테이블의 첫 번째TIMESTAMP
컬럼의 기본값은 현재 날짜와 시간입니다. 11.3 절 "날짜 및 시간 형식" 을 참조하십시오.ENUM
이 아닌 문자열 기본값은 빈 문자열입니다.ENUM
의 기본은 먼저 열거입니다.
정수 컬럼 정의에서 SERIAL DEFAULT VALUE
는 NOT NULL AUTO_INCREMENT UNIQUE
별칭입니다.