본문 바로가기

IT 엔지니어/Linux server

MariaDB

CREATE TABLE new_table (SELECT * FROM original_table);

이 문법은 새로운 테이블을 생성하면서 기존 테이블의 데이터도 함께 복사하는 방식

하지만 주의할 점이 많아서 추천하지 않는 방법

 

🔹 해당 SQL의 동작 방식

  1. new_table을 생성한다.
  2. 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