카테고리 없음
SQL Column추가,변경, 삭제, 타입 변경, DB변경 방법
코등어1
2025. 2. 7. 23:26
Column 추가
-- 방법
ALTER TABLE 'Table Name' ADD 'Column Name' 'Data Type' NOT NULL;
-- 예시 1
ALTER TABLE users ADD email VARCHAR(100) NOT NULL;
-- 예시 2 + 주석
ALTER TABLE boards ADD comment_id BIGINT NOT NULL COMMENT '댓글 식별자';
특정 Column 뒤에 Column 추가
-- 방법
ALTER TABLE 'Table Name' ADD COLUMN 'Column Nmae' 'DataType' AFTER 'existing Column';
-- 예시1
-- users 테이블에 birth_date 컬럼을 name 컬럼 뒤에 추가
ALTER TABLE users ADD COLUMN birth_date DATE AFTER name;
맨 앞에 Column 추가
-- 방법
ALTER TABLE 'Table Name' ADD COLUMN 'Column Nmae' 'DataType' FIRST;
-- 예시1
-- users 테이블 맨 앞에 email 컬럼 추가
ALTER TABLE users ADD COLUMN email VARCHAR(255) NOT NULL FIRST;
Column 이름 변경
ALTER TABLE 'Table Name'
RENAME COLUMN 'Old Column Name' TO 'New Column Name';
-- 예시1
-- orders 테이블에서 order_date를 purchase_date로 변경
ALTER TABLE orders RENAME COLUMN order_date TO purchase_date;
Column 데이터 타입 변경
ALTER TABLE 테이블이름 MODIFY 컬럼명 데이터타입;
-- 예시1
-- age 컬럼의 데이터 타입을 BIGINT NOT NULL로 변경
ALTER TABLE users MODIFY COLUMN age BIGINT NOT NULL;
-- 예시2
-- salary 컬럼의 데이터 타입을 FLOAT(8,2)로 변경
ALTER TABLE employees MODIFY COLUMN salary FLOAT(8,2);
Column 이름, 데이터 타입 모두 변경
ALTER TABLE 'Table Name' CHANGE COLUMN 'Old Column' 'New Column' 'Data Type' NOT NULL;
-- 예시1
-- age → user_age로 변경 + 데이터 타입 INT NOT NULL로 변경
ALTER TABLE users CHANGE COLUMN age user_age INT NOT NULL;
-- 예시2
-- price → product_price로 변경 + 데이터 타입 DECIMAL(10,2)로 변경
ALTER TABLE products CHANGE COLUMN price product_price DECIMAL(10,2);
Column 삭제
ALTER TABLE 테이블이름 DROP COLUMN 컬럼명;
-- 예시1
-- users 테이블에서 birth_date 컬럼 삭제
ALTER TABLE users DROP COLUMN birth_date;
-- 예시2
-- orders 테이블에서 shipping_address 컬럼 삭제
ALTER TABLE orders DROP COLUMN shipping_address;
DB 이름 변경
현재 MySQL에서 데이터베이스 이름을 변경하는 방법은 직접적으로 지원되지 않는다.
그래서 다음과 같은 방법들로 우회해야한다.
새로운 DB 생성 후 데이터 옮기기
-- new_database라는 새 데이터베이스를 만들고 old_database의 테이블을 옮기는 방법
CREATE DATABASE new_database;
RENAME TABLE old_database.users TO new_database.users;
RENAME TABLE old_database.orders TO new_database.orders;
-- 예시1
-- company_db라는 새 데이터베이스를 생성
-- sales_db의 customers 테이블을 company_db로 이동 및 이름 유지
-- sales_db의 transactions 테이블을 company_db로 이동 및 이름 유지
CREATE DATABASE company_db;
RENAME TABLE sales_db.customers TO company_db.customers;
RENAME TABLE sales_db.transactions TO company_db.transactions;
-- 예시2
-- archive_db라는 새 데이터베이스를 생성
-- main_db의 logs 테이블을 archive_db로 이동하면서 logs_2024로 이름 변경
-- main_db의 records 테이블을 archive_db로 이동하면서 records_backup으로 이름 변경
CREATE DATABASE archive_db;
RENAME TABLE main_db.logs TO archive_db.logs_2024;
RENAME TABLE main_db.records TO archive_db.records_backup;
mysqldump를 사용하여 DB 복사 후 삭제
-- old_database의 모든 데이터를 backup.sql에 백업
-- new_database 생성 후 백업 데이터를 복원
-- old_database 삭제
mysqldump -u root -p old_database > backup.sql
mysql -u root -p -e "CREATE DATABASE new_database"
mysql -u root -p new_database < backup.sql
mysql -u root -p -e "DROP DATABASE old_database"
-- user_db 데이터베이스를 user_backup.sql로 백업
-- new_user_db라는 새 데이터베이스 생성
-- user_backup.sql을 new_user_db로 복원
-- 기존 user_db를 삭제
mysqldump -u root -p user_db > user_backup.sql
mysql -u root -p -e "CREATE DATABASE new_user_db"
mysql -u root -p new_user_db < user_backup.sql
mysql -u root -p -e "DROP DATABASE user_db"
이 방법은 터미널 창에서 실행해야한다.
information_schema.tables 와 concat 을 이용한 방법
일단 이 방법은 옮기려는 새로운 DB가 존재 해야한다.
같은 MySQL 서버에서 DB를 바꿀때 빠른 방법 같다(?)
하지만 외래키가 있는 경우엔 어떻게 될지 모른다..
-- new_testDB DB의 있는 모든 테이블을 old_testDB에 옮기는 RENAME TABLE SQL문이 결과로 나옴
-- 바로 옮기는 것이 아님
SELECT concat('RENAME TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' TO ','new_testDB.',TABLE_NAME,';')
FROM information_schema.tables
WHERE TABLE_SCHEMA LIKE 'old_testDB';
만약에 old_testDB에 users, orders, products 테이블이 있다고 가정하면 위 SQL문의 실행 결과는 다음과 같다.
RENAME TABLE old_testDB.users TO new_testDB.users;
RENAME TABLE old_testDB.orders TO new_testDB.orders;
RENAME TABLE old_testDB.products TO new_testDB.products;
그 후 생성된 SQL문을 차례대로 실행하면 된다
- old_testDB.users → new_testDB.users 로 이동
- old_testDB.orders → new_testDB.orders 로 이동
- old_testDB.products → new_testDB.products 로 이동
- 이제 old_testDB 데이터베이스는 존재하지만, 모든 테이블이 new_testDB 로 이동했기 때문에 비어 있게 된다.
출처 : https://ryean.tistory.com/41#google_vignette
[MySQL] 데이터베이스 이름 변경 (RENAME DATABASE)
MySQL 에서는 버전 5.1.7 에서 RENAME DATABASE 구문이 추가되었으나, database 의 내용이 손실될 위험성이 발견이 되어 버전 5.1.23 이후부터 제거됐다고 한다. 그래서 database 이름을 변경하려면 새로운 data
ryean.tistory.com