erd.sketch

SQL 마이그레이션: 두 버전 사이의 ALTER

왼쪽이 예전 스키마, 오른쪽이 바뀐 스키마입니다. 아래는 앞의 것을 뒤의 것으로 바꾸기 위해 편집기가 내놓는 문장입니다. 문서 예시가 아니라 실제 출력입니다.

이전v1.sql
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    email VARCHAR(120) NOT NULL,
    created_at TIMESTAMPTZ
);

CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL,
    total NUMERIC(12,2) NOT NULL
);
이후v2.sql
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    phone VARCHAR(120),
    created_at TIMESTAMPTZ NOT NULL,
    CONSTRAINT uq_users_email UNIQUE (email)
);

CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL,
    total NUMERIC(12,2) NOT NULL,
    CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);

CREATE INDEX idx_orders_user ON orders (user_id);
결과PostgreSQL
ALTER TABLE users ADD COLUMN phone VARCHAR(120);
ALTER TABLE users ALTER COLUMN email TYPE VARCHAR(255);
ALTER TABLE users ALTER COLUMN created_at SET NOT NULL;
ALTER TABLE users ADD CONSTRAINT uq_users_email UNIQUE (email);

CREATE INDEX idx_orders_user ON orders (user_id);

ALTER TABLE orders ADD CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE;
편집기 열기

스크립트는 브라우저에 남습니다. 해석도 생성도 사용자의 기기에서 이뤄지고 서버로는 아무것도 가지 않습니다.

같은 변경을 방언별로 쓰면

PostgreSQLALTER TABLE users ALTER COLUMN email TYPE VARCHAR(255);
MySQL / MariaDBALTER TABLE users MODIFY COLUMN email VARCHAR(255) NOT NULL;
SQL ServerALTER TABLE users ALTER COLUMN email NVARCHAR(255) NOT NULL;
OracleALTER TABLE users MODIFY (email VARCHAR2(255));