rename
rename은 SQL에서 테이블, 컬럼, 인덱스 등 데이터베이스 객체의 이름을 변경하는 명령어이다. 스키마 리팩토링이나 명명 규칙 변경 시 필수적으로 사용된다.
기본 구문 (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 );
같이 보기[편집]