Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 서로 다른 데이터베이스에 있는 두 테이블 간 데이터 이동 방법

서로 다른 데이터베이스에 존재하면서 열 구조까지 다른 두 테이블 사이에서 데이터를 옮기려면 INSERT ... SELECT 문을 사용하면 됩니다. 기본 문법은 다음과 같습니다.

INSERT INTO
yourDatabaseName1.yourTableName1(yourColumnName1,yourColumnName2,....N)
SELECT yourColumnName1,yourColumnName2,....N FROM
yourdatabaseName2.yourTableName2;

즉, 대상 테이블 이름 앞에 데이터베이스 이름을 점(.)으로 연결하여 지정하면, 데이터베이스가 달라도 한 번의 쿼리로 데이터를 복사할 수 있습니다.

이번 예제에서는 두 개의 데이터베이스를 사용합니다.

  • sample
  • test

1단계: test 데이터베이스에 첫 번째 테이블 생성

먼저 "test" 데이터베이스에 send 테이블을 생성합니다.

mysql> use test;
Database changed
mysql> create table send
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(20)
    -> );
Query OK, 0 rows affected (1.19 sec)

데이터 삽입

INSERT 명령으로 몇 개의 레코드를 추가합니다.

mysql> insert into send(Name) values('John');
Query OK, 1 row affected (0.20 sec)
mysql> insert into send(Name) values('Carol');
Query OK, 1 row affected (0.40 sec)

저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from send;

실행 결과는 다음과 같습니다.

+----+-------+
| Id | Name  |
+----+-------+
| 1  | John  |
| 2  | Carol |
+----+-------+
2 rows in set (0.00 sec)

2단계: sample 데이터베이스에 두 번째 테이블 생성

이번에는 "sample" 데이터베이스에 receive 테이블을 생성합니다. 주목할 점은 첫 번째 테이블과 열 이름이 다르다는 것입니다.

mysql> use sample;
Database changed
mysql> create table receive
   -> (
   -> UserId int,
   -> UserName varchar(20)
   -> );
Query OK, 0 rows affected (0.59 sec)

위에서 볼 수 있듯이, 아직 두 번째 테이블 "receive"에는 어떤 레코드도 들어 있지 않습니다.

3단계: 서로 다른 데이터베이스 간 데이터 이동

이제 열 구조가 다른 두 테이블 사이에서 데이터를 이동시켜 보겠습니다. 쿼리는 다음과 같습니다.

mysql> insert into sample.receive(UserId,UserName)
   -> select Id,Name from test.send;
Query OK, 2 rows affected (0.21 sec)
Records: 2 Duplicates: 0 Warnings: 0

여기서 핵심은 SELECT 절의 열 순서와 대상 테이블의 열 순서가 서로 대응되도록 작성한다는 것입니다. 즉, test.sendIdUserId로, NameUserName으로 매핑됩니다.

4단계: 결과 확인

sample.receive 테이블의 모든 레코드를 조회합니다.

mysql> select *from receive;

다음 출력 결과를 통해 서로 다른 데이터베이스의 두 테이블 간에 데이터가 성공적으로 이동했음을 확인할 수 있습니다.

+--------+----------+
| UserId | UserName |
+--------+----------+
| 1      | John     |
| 2      | Carol    |
+--------+----------+
2 rows in set (0.00 sec)

정리

INSERT ... SELECT 문을 사용하면 데이터베이스가 다르고 열 이름도 다른 테이블이라도, SELECT 절에서 열을 적절히 매핑하기만 하면 손쉽게 데이터를 이동할 수 있습니다. 단, 두 열의 데이터 타입이 호환 가능해야 하며, 대상 테이블에 NOT NULL 제약 조건이 있다면 해당 열에 반드시 값을 제공해야 한다는 점에 유의하세요.