CREATE TABLE new_table (SELECT * FROM original_table);
이 문법은 새로운 테이블을 생성하면서 기존 테이블의 데이터도 함께 복사하는 방식
하지만 주의할 점이 많아서 추천하지 않는 방법
🔹 해당 SQL의 동작 방식
- new_table을 생성한다.
- original_table의 모든 데이터를 new_table에 복사한다. (단, PRIMARY KEY, INDEX, AUTO_INCREMENT, FOREIGN KEY 등은 복사되지 않음!)
❌ 왜 추천하지 않을까?
문제점 설명
PRIMARY KEY가 복사되지 않음 | 새로운 테이블은 기본 키가 없음. |
AUTO_INCREMENT 속성이 사라짐 | 자동 증가 컬럼이 일반 숫자 컬럼이 되어 버림. |
INDEX(인덱스)가 복사되지 않음 | 쿼리 성능 저하 가능성. |
FOREIGN KEY(외래 키)가 사라짐 | 데이터 무결성이 깨질 위험 있음. |
제약 조건(NOT NULL, UNIQUE 등) 미복사 | 원본 테이블과 다른 동작 가능성. |
✅ 테이블 + 데이터 + 속성까지 복사하는 올바른 방법
1️⃣ 테이블 구조 복사 (LIKE 사용)
CREATE TABLE new_table LIKE original_table;
- 이 방법은 기본 키, 인덱스, AUTO_INCREMENT, 제약 조건까지 복사됨.
- 하지만 데이터는 복사되지 않음.
2️⃣ 데이터까지 복사 (INSERT INTO ... SELECT * FROM ...)
INSERT INTO new_table SELECT * FROM original_table;
- 데이터를 복사하지만, AUTO_INCREMENT는 초기화됨.
3️⃣ AUTO_INCREMENT 값 유지하는 방법
SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';
INSERT INTO new_table SELECT * FROM original_table;
- AUTO_INCREMENT 값도 그대로 복사됨.
🔥 최종 정리
✅ CREATE TABLE new_table (SELECT * FROM original_table); → ❌ 비추천! (제약 조건이 복사되지 않음)
✅ CREATE TABLE new_table LIKE original_table; INSERT INTO new_table SELECT * FROM original_table; → ✅ 추천! (모든 속성 유지 가능)
📌 결론
테이블 전체 복사 시에는 LIKE + INSERT 방식을 사용해야 한다!
그냥 SELECT * FROM original_table로 생성하면 핵심 속성이 날아가므로 비추천! 🚨
테이블 복사
create table db7.usrtbl1 like db1.usrtbl2;
create table [new DB. new table] like [oirgin DB. origin table];
db1에 있는 usrtbl2 테이블 구조만 복사하여 db7에 usrtbl1을 생성한다
insert into newDB new table select * from orign DB. origin table;
delete from 테이블명 where filed name =’ values ’;
delete from 테이블명 where filed name =’ 1-3’; // 1-3까지 삭제
truncate table 테이블명; // 테이블 내 데이터 전체 삭제
'IT 엔지니어 > Linux server' 카테고리의 다른 글
리눅스 스케줄링 (0) | 2025.02.14 |
---|---|
MariaDB (0) | 2025.02.14 |
[Web Server] (0) | 2025.02.13 |
리눅스 소유권 /허가권 (0) | 2025.02.12 |
Linux 사용자 관리 (0) | 2025.02.11 |