검수요청.png검수요청.png

rename

위키원
이동: 둘러보기, 검색

renameSQL에서 테이블, 컬럼, 인덱스 등 데이터베이스 객체의 이름을 변경하는 명령어이다. 스키마 리팩토링이나 명명 규칙 변경 시 필수적으로 사용된다.

기본 구문 (Syntax)[편집]

1. 테이블 이름 변경
-- MySQL, PostgreSQL, SQL Server
ALTER TABLE old_name RENAME TO new_name;

-- Oracle
RENAME old_name TO new_name;

-- SQL Server (다른 구문)
EXEC sp_rename 'old_name', 'new_name';
2. 컬럼 이름 변경
-- MySQL, PostgreSQL
ALTER TABLE table_name RENAME COLUMN old_name TO new_name;

-- Oracle, SQL Server
EXEC sp_rename 'table_name.old_name', 'new_name', 'COLUMN';
3. 인덱스 이름 변경
-- MySQL
ALTER TABLE table_name RENAME INDEX old_name TO new_name;

-- PostgreSQL
ALTER INDEX old_name RENAME TO new_name;

-- SQL Server
EXEC sp_rename 'table_name.old_name', 'new_name', 'INDEX';

실전 예제[편집]

1. 테이블 이름 변경
-- customers 테이블을 clients로 변경
ALTER TABLE customers RENAME TO clients;  -- MySQL/PostgreSQL

RENAME customers TO clients;  -- Oracle
2. 컬럼 이름 변경
-- employees 테이블의 phone 컬럼을 phone_number로 변경
ALTER TABLE employees RENAME COLUMN phone TO phone_number;  -- MySQL/PostgreSQL

EXEC sp_rename 'employees.phone', 'phone_number', 'COLUMN';  -- SQL Server
3. 인덱스 이름 변경
-- idx_email 인덱스를 idx_customer_email로 변경
ALTER TABLE customers RENAME INDEX idx_email TO idx_customer_email;  -- MySQL

ALTER INDEX idx_email RENAME TO idx_customer_email;  -- PostgreSQL
4. 다중 객체 일괄 변경 (PostgreSQL)
-- 트랜잭션으로 안전하게 변경
BEGIN;
ALTER TABLE orders RENAME TO purchase_orders;
ALTER INDEX orders_pkey RENAME TO purchase_orders_pkey;
COMMIT;

주의사항 & 한계[편집]

의존성 문제
-- 오류: 뷰가 참조하는 테이블 이름 변경 시
CREATE VIEW active_users AS SELECT * FROM users WHERE status=1;
ALTER TABLE users RENAME TO members;  -- 뷰 깨짐
트랜잭션 지원
  • MySQL: DDL은 암시적 커밋 발생
  • PostgreSQL: DDL도 트랜잭션 내 가능
권한 필요
  • 객체에 대한 ALTER 권한 필요
DBMS별 차이
  • SQL Server: sp_rename 프로시저 사용
  • Oracle: RENAME 명령어 단순화

고급 기법[편집]

1. 시스템 카탈로그로 조회 후 변경 (PostgreSQL)
-- 특정 패턴의 테이블 이름 일괄 변경
DO $$
DECLARE
    tbl record;
BEGIN
    FOR tbl IN 
        SELECT tablename 
        FROM pg_tables 
        WHERE tablename LIKE 'temp_%'
    LOOP
        EXECUTE format(
            'ALTER TABLE %I RENAME TO migrated_%s',
            tbl.tablename,
            substr(tbl.tablename, 6)
        );
    END LOOP;
END $$;
2. 외래키 제약조건 유지 (MySQL)
-- 테이블 이름 변경 시 제약조건 자동 업데이트
ALTER TABLE parent RENAME TO new_parent;
ALTER TABLE child 
    DROP FOREIGN KEY fk_name,
    ADD FOREIGN KEY (parent_id) REFERENCES new_parent(id);

DBMS별 구현 비교[편집]

기능 MySQL/MariaDB PostgreSQL Oracle SQL Server
테이블 이름 변경 ALTER TABLE RENAME ALTER TABLE RENAME RENAME TO sp_rename
컬럼 이름 변경 RENAME COLUMN RENAME COLUMN sp_rename sp_rename
트랜잭션 지원 ❌ (암시적 커밋)
일괄 변경 PL/pgSQL 가능

실무 적용 팁[편집]

변경 전 확인
-- MySQL: 테이블 구조 확인
SHOW CREATE TABLE employees;

-- PostgreSQL: 의존성 확인
SELECT * FROM pg_depend WHERE refobjid = 'old_name'::regclass;
애플리케이션 영향도 분석
  • 코드베이스 전체 검색: grep -r "old_name" /project_path
변경 스크립트 자동화
# 백업 후 실행 (MySQL 예시)
mysqldump -u root db_name > backup.sql
mysql -u root db_name < rename_scripts.sql
이름 변경 로그 보관
-- 변경 이력 테이블
CREATE TABLE schema_changes (
    change_id INT AUTO_INCREMENT PRIMARY KEY,
    object_type VARCHAR(20),
    old_name VARCHAR(100),
    new_name VARCHAR(100),
    changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

같이 보기[편집]


  검수요청.png검수요청.png 이 Rename 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.