[SQL] ALTER TABLE

pysun·2024년 10월 5일

SQL

목록 보기
8/11

ALTER TABLE

  • 테이블명 변경
  • 컬럼 삭제/추가/이름변경
  • 제약조건 삭제/추가

컬럼 삭제

ALTER TABLE users DROP COLUMN profile_picture;

컬럼명 및 컬럼타입 변경

-- 원래 bio 타입이 TEXT이고 NOT NULL이었음 -> 제약조건에 NOT NULL 추가해줘야 함 
ALTER TABLE users CHANGE COLUMN bio about_me TINYTEXT NOT NULL;

컬럼타입만 변경

ALTER TABLE users MODIFY COLUMN about_me TEXT;

NOT NULL <-> NULL 변환

ALTER TABLE users MODIFY COLUMN bed_time TIME NOT NULL;

테이블명 변경

ALTER TABLE users RENAME TO customers;

제약조건 추가

ALTER TABLE users
	ADD CONSTRAINT uq_email UNIQUE (email),
    ADD CONSTRAINT uq_username UNIQUE (username)
    ADD CONSTRAINT chk_age CHECK (age < 100);

제약조건 삭제

ALTER TABLE users
	DROP CONSTRAINT uq_email,
    DROP CONSTRAINT uq_username,
    DROP CONSTRAINT chk_age;

테이블 구조 확인

SHOW CREATE TABLE users;

데이터 타입 변경 시 기존 타입과 충돌이 생길 경우

-- graduation_year는 연도가 이미 들어가 있기 때문에 날짜로 변경 x
ALTER TABLE users MODIFY COLUMN graduation_year DATE;
-- 방법: 새로운 컬럼 생성
ALTER TABLE users ADD COLUMN graduation_date DATE 
NOT NULL DEFAULT (MAKEDATE(graduation_year, 1));

ALTER TABLE users DROP COLUMN graduation_year;

Generated column

다른 컬럼을 사용해서 값을 도출하는 컬럼

CREATE TABLE user_v2 (
	user_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  	first_name VARCHAR(50),
  	last_name VARCHAR(50),
  	email VARCHAR(100),
  	full_name VARCHAR(101) GENERATED ALWAYS AS (CONCAT(first_name, ' ', last_name)) STORED
    -- STORED: 실제 디스크에 저장. 데이터 삽입 또는 수정 시 성능이 저하 될 수 있음
);
  • Stored: 어떤 필드에 대해 쿼리가 자주 실행되고 조회 속도가 빨라야 하고 수정/삽입이 좀 느려도 상관없고
    디스크 공간도 신경 쓰지 않았을 때 사용하면 좋음

-- virtual generated column: 디스크나 db에 저장 x
-- email_domain 컬럼을 조회할 때마다 매번 연산 수행
-- 컬럼 조회시 성능 불이익
ALTER TABLE user_v2 ADD COLUMN email_domain VARCHAR(50) 
GENERATED ALWAYS AS (SUBSTRING_INDEX(email, '@', -1)) VIRTUAL;
  • Virtual: 어떤 필드에 대해 쿼리가 자주 실행되지 않고 조회 속도가 좀 느려도 상관없고 db 저장공간을 많이 차지하고 싶지 않을 때 사용하면 좋음
profile
배움의 흔적이 성장으로 이어지는 공간

0개의 댓글