MYSQL

[DB] 특정 로우 그대로 복사하기

litzoo 2024. 11. 21. 14:51

데이터 하나가 필요해서 똑같이 복사하는 sql이 필요했다!

 

데이터베이스에서 특정 로우를 복사하는 방법은 사용하는 DBMS에 따라 약간씩 다를 수 있지만,

일반적으로 INSERT INTO ... SELECT 문을 사용하여 쉽게 복사할 수 있습니다.

아래는 일반적인 SQL 구문과 예시입니다.

 

https://iconduck.com/icons/253855/database-copy


기본 구문

INSERT INTO [테이블 이름] ([컬럼1], [컬럼2], [컬럼3], ...) 
SELECT [컬럼1], [컬럼2], [컬럼3], ... 
FROM [테이블 이름]
WHERE [조건];​

예시

예제 테이블: users

  • 컬럼: id, name, email, age

1. 특정 로우를 복사

ID가 1인 데이터를 복사하려면:

INSERT INTO users (name, email, age) 
SELECT name, email, age 
FROM users 
WHERE id = 1;
  • 결과: ID 1과 동일한 데이터가 새 로우로 추가됨.
    (id 컬럼이 AUTO_INCREMENT라면 새 ID가 자동 생성됨.)

2. 모든 로우 복사

테이블의 모든 데이터를 한 번에 복사하려면:

INSERT INTO users (name, email, age)
SELECT name, email, age
FROM users;​

3. 테이블 간 복사

만약 데이터를 동일한 구조를 가진 다른 테이블에 복사하려면:

INSERT INTO users_backup (name, email, age)
SELECT name, email, age
FROM users
WHERE id = 1;​

주의 사항

  1. AUTO_INCREMENT 또는 PRIMARY KEY 충돌 방지
    • id 같은 기본 키를 복사하려면 중복 문제가 생길 수 있으므로 제외하거나, 새 값으로 설정하세요.
  2. NULL 처리
    • 복사된 데이터에서 NULL 값이 필요 없는 경우 COALESCE를 사용하여 기본값으로 대체할 수 있습니다.
    sql
    코드 복사
    SELECT COALESCE(name, 'default_name'), email, age FROM users WHERE id = 1;
  3. 트랜잭션
    • 중요 데이터를 복사할 때는 트랜잭션을 사용해 작업 중 오류 발생 시 롤백할 수 있도록 처리하는 것이 좋습니다:
     
START TRANSACTION; 
INSERT INTO users (name, email, age) 
SELECT name, email, age 
FROM users 
WHERE id = 1; 
COMMIT;

필요한 구문을 상황에 맞게 수정해 사용하시면 됩니다! 😊

728x90
반응형