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;
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;
다른 컬럼을 사용해서 값을 도출하는 컬럼
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: 실제 디스크에 저장. 데이터 삽입 또는 수정 시 성능이 저하 될 수 있음
);
-- 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;