Open danbi5228 opened 1 year ago
숫자 타입의 칼럼에 자동 증가 옵션을 사용해 인조 키(Artificial Key)를 생성할 수 있다
AUTO_INCREMENT
자동 증가값 변경
auto_increment_increment
와 auto_increment_offset
시스템 설정을 이용auto_increment_increment
10이고 auto_increment_offset
5일 때
자동 생성되는 값은 5, 15, 25, ... 와 같이 증가AUTO_INCREMENT
옵션을 사용한 칼럼
PK나 유니크키가 여러 개의 칼럼을 구성되면?
AUTO_INCREMENT
속성의 칼럼값이 증가하는 패턴이 스토리지 엔진마다 달라짐
MyISAM : 자동 증가 옵션이 사용된 칼럼이 PK나 유니크 키의 아무 위치에나 사용될 수 있다
InnoDB : 자동 증가 칼럼으로 시작되는 인덱스(PK 또는 일반 인덱스)를 생성해야 한다
아래 예제 처럼 InnoDB 테이블에서 AUTO_INCREMENT
칼럼을 PK의 뒤쪽에 배치하면 오류가 발생함
// AUTO_INCREMENT 칼럼을 PK의 뒤쪽에 배치해 테이블 생성 시 오류 발생
CREATE TABLE tb_autoinc_innodb (
fd_pk1 INT NOT NULL DEFAULT '0',
fd_pk2 INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (fd_pk1, fd_pk2)
) ENGINE=INNODB
// AUTO_INCREMENT 칼럼이 PK 뒤에 배치되어 있으나 유니크 키에서 제일 선두에 위치하여 정상적으로 테이블이 생성됨
CREATE TABLE tb_autoinc_innodb (
fd_pk1 INT NOT NULL DEFAULT '0',
fd_pk2 INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (fd_pk1, fd_pk2)
UNIQUE KEY ux_fdpk2 (fd_pk2)
) ENGINE=INNODB
AUTO_INCREMENT
AUTO_INCREMENT
칼럼을 추가하면 새로 추가된 칼럼은 1부터 자동으로 증가된 값이 할당됨SHOW CREATE TABLE
명령으로 조회할 수 있다CREATE TABLE tb_autoinc_innodb (
fd_pk1 INT NOT NULL DEFAULT '0',
fd_pk2 INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (fd_pk1, fd_pk2)
UNIQUE KEY ux_fdpk2 (fd_pk2)
) ENGINE=INNODB AUTO_INCREMENT=7;
자동 증가값이 1이 아닌 7부터 시작되니 개발용 서버에서 SHOW CREATE TABLE
명령으로 조회한 DDL 내용 그대로 서비스용 MySQL에다가 사용할 때 자동 증가값이 1이 아닌 값으로 설정되니 조심
날짜 혹은 시간만 따로 저장할 수 있다
날짜와 시간을 합쳐서 하나의 칼럼에 저장할 수 있게 여러 가지 타입을 지원
MySQL 5.6부터 TIME과 DATETIME, TIMESTAMP 타입은 밀리초 단위의 데이터를 저장할 수 있게됨
NOW()
는 NOW(0)으로 실행된다MySQL 날짜 타입은 칼럼 자체에 타임존 정보가 저장되지 않는다
하지만 TIMESTAMP는 항상 UTC 타임존으로 저장되므로 타임존이 달라져도 값이 자동으로 보정된다
SET timezone='...'
명령을 실행할 때 Unknown or incorrect time zone: 'Asia/Seoul'
와 같은 에러가 발생하면?
자바 응용 앱에서 타임존을 한국 서울로 한 경우와 미국 로스앤젤레스로 변경했을 때 MySQL 서버의 데이터 차이
JVM 타임존이 한국 서울
JVM 타임존이 미국 로스앤젤레스
MySQL 서버의 칼럼 타입 datetime, timestamp에 상관없이 JDBC 드라이버는 날짜 및 시간 정보를 MySQL 타임존에서 JVM의 타임존으로 변환해서 출력함
요즘은 Hibernate나 MyBatis 등과 같은 ORM을 사용하기에 코드 내부에서 DATETIME 칼럼값을 어떤 JDBC API를 이용해서 페치하는지, 타임존 변환이 기대하는데로 작동하는지 테스트 해보기를 권장함
이미 데이터를 가지고 있는 MySQL 서버의 타임존을 변경해야 한다면?
하지만 TIMESTAMP 타입의 값은 항상 UTC로 저장되기에 MySQL 서버의 타임존을 변경한다고 해서 별도로 변환 작업이 필요로 하지 않는다
system_time_zone 시스템 변수는 MySQL 서버의 타임존을 의미
--timezone
옵션을 이용해 변경할 수 있다time_zone 시스템 변수는 MySQL 서버로 연결하는 모든 클라이언트 커넥션의 기본 타임존을 의미
time_zone 시스템 변수에 아무것도 설정하지 않으면?
\0
: 아스키 NULL 문자\'
: 홑따옴표\"
: 쌍따옴표\b
: 백스페이스 문자\n
: 개행문자\r
: 캐리지 리턴 문자 (유닉스 계열이 아닌 윈도우 운영체제에서 개행문자는 \r\n
의 조합으로 개행문자를 사용\t
: 탭 문자\\
: 백 슬래시(\) 문자\%
: 퍼센트 문자. LIKE 패턴에서만 사용\_
: 언더스코어 문자. LIKE 패턴에서만 사용DECIMAL
타입을 이용해야 함
다음 스터디
2023-07-03 pm
10:3009:30 월요일정리 범위