TIL MySQL 컬럼 설정 변경하기

ESH'S VELOG·2023년 7월 26일
1

로우쿼리로 계속해서 테이블을 생성하는 중이다.
작성하다 보니 과제에서 설정하라는 값을 나중에 발견했다.

amount의 default값이 0이다.
table drop없이 컬럼의 설정을 변경하려면 어떻게 해야할 지 찾아봤다.

ALTER와 MODIFY를 사용해서 쿼리문을 사용하면 된다.

ALTER TABLE item MODIFY COLUMN amount SMALLINT NOT NULL DEFAULT 0

ALTER TABLE (테이블명) MODIFY COLUMN (변경할 컬럼명) 바꿀 설정

실행을 하니

amount의 default값이 0으로 변경된 것을 확인할 수 있었다.

또 하나 문제
created_at과 updated_at을 설정해주지 않아 설정을 또 따로 넣어주려고 한다.
과제에서 설정하라고 하는 시간 설정은 timestamp를 쓰라고 한다.
날짜 설정에 관한 MySQL의 공식 문서를 찾아보자

Type
.# DATE

  • YYYY-MM-DD 형식이고 1000-01-01 ~ 9999-12-31 까지 입력가능
    .# DATETIME
  • YYYY-MM-DD hh:mm:ss 형식이고 1000-01-01 00:00:00~ 9999-12-31 23:59:59 까지 입력가능
    .# TIMESTAMP
  • YYYY-MM-DD hhㅇ:mm:ss 형식. 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC 까지 입력가능

.# DATETIME과 TIMESTAMP모두 최대 6자리 소수점이하(microseconds)까지의 정확성을 설정할 수 있다.

.# DATETIME과 TIMESTAMP의 차이점??
우선 TIMESTAMP는 UTC, 세계표준시를 갖고 있으며, 1970년~2038년 사이의 값만 가질 수 있다.
MySQL의 공식문서를 보면 TIMESTAMP로 저장된 데이터는 현재 시간대를 UTC로 변환하여 저장한 뒤 조회할 때는 저장된 UTC를 변환하여 현재시간으로 보여준다.

##?? 여기서 문제 ?? 왜 ERD에는 날짜 데이터타입을 TIMESTAMP로 설정했을까?
즉! 키오스크에서 고객이 주문한 날짜 취소한 날짜를 영수증을 통해서 확인할 필요가 있기때문에 여기서는 현재날짜가 찍히도록 하는 것이 중요하다!!

따라서 이미 생성한 테이블에 컬럼을 추가하는 방법은 아래와 같다.

ALTER TABLE item ADD COLUMN created_at TIMESTAMP
ALTER TABLE item ADD COLUMN updated_at TIMESTAMP

컬럼을 넣은 뒤 not null을 넣어주지 않아 query문으로 다시 수정하여 넣었다.

ALTER TABLE item MODIFY COLUMN updated_at TIMESTAMP NOT NULL
ALTER TABLE item MODIFY COLUMN created_at TIMESTAMP NOT NULL

1:N 관계 설정 테이블 만드는 방법(제약 조건)

item 테이블은 만들었고, place_order_item테이블을 만들어 발주할 때 사용가능한 테이블을 만드려고 한다.
이 때, item은 여러 번 발주할 수 있고

TABLE place_order_item : TABLE item = 1: N

그러면 place_order_item은 부모 테이블인 item의 PK를 foreign key로 가져와서 만들면 된다.

CREATE TABLE IF NOT EXISTS place_order_item (
    id BIGINT NOT NULL AUTO_INCREMENT,
    created_at TIMESTAMP NOT NULL,
    updated_at TIMESTAMP NOT NULL,
    amount SMALLINT NOT NULL,
    state TINYINT NOT NULL DEFAULT 0,
    PRIMARY KEY(id),
    item_id SMALLINT REFERENCES item(id)
)
profile
Backend Developer - Typescript, Javascript 를 공부합니다.

0개의 댓글