반응형
mysql-한 테이블에서 다른 테이블로 행 이동
구조가 동일한 두 개의 테이블이있는 경우 한 테이블에서 다른 테이블로 행 집합을 이동하려면 어떻게해야합니까?
행 집합은 선택 쿼리에서 결정됩니다.
예를 들면 :
customer table
person_id | person_name | person_email
123 tom tom@example.com
persons table
person_id | person_name | person_email
샘플 선택은 다음과 같습니다.
select * from customer_table where person_name = 'tom';
고객 테이블에서 사람 테이블로 행을 이동하고 싶습니다.
원래 테이블에서 데이터를 제거하는 것이 이상적이지만 이것은 거래 중단자가 아닙니다.
간단한 INSERT INTO SELECT 문 :
INSERT INTO persons_table SELECT * FROM customer_table WHERE person_name = 'tom';
DELETE FROM customer_table WHERE person_name = 'tom';
INSERT INTO Persons_Table (person_id, person_name,person_email)
SELECT person_id, customer_name, customer_email
FROM customer_table
WHERE "insert your where clause here";
DELETE FROM customer_table
WHERE "repeat your where clause here";
Fabio의 대답은 정말 좋지만 실행 시간이 오래 걸립니다 (Trilarion이 이미 작성했듯이)
더 빠른 실행을 가진 다른 솔루션이 있습니다.
START TRANSACTION;
set @N := (now());
INSERT INTO table2 select * from table1 where ts < date_sub(@N,INTERVAL 32 DAY);
DELETE FROM table1 WHERE ts < date_sub(@N,INTERVAL 32 DAY);
COMMIT;
@N은 시작할 때 타임 스탬프를 가져 오며 두 명령 모두에 사용됩니다. 아무도 방해하지 않도록 모든 것이 거래에 포함됩니다.
INSERT INTO Persons_Table (person_id, person_name,person_email)
SELECT person_id, customer_name, customer_email
FROM customer_table
ORDER BY `person_id` DESC LIMIT 0, 15
WHERE "insert your where clause here";
DELETE FROM customer_table
WHERE "repeat your where clause here";
ORDER BY, LIMIT 및 ASC / DESC를 사용하여 이동할 특정 열을 제한하고 선택할 수도 있습니다.
BEGIN;
INSERT INTO persons_table select * from customer_table where person_name = 'tom';
DELETE FROM customer_table where person_name = 'tom';
COMMIT;
나는 동일한 문제를 해결해야했고 이것이 내가 해결책으로 사용한 것입니다.
이 솔루션을 사용하려면 원본 및 대상 테이블이 동일해야하며 첫 번째 테이블에서 고유 한 ID와 자동 증가가 있어야합니다 (동일한 ID가 재사용되지 않도록).
table1과 table2에이 구조가 있다고 가정 해 봅시다.
|id|field1|field2
이 두 가지 쿼리를 만들 수 있습니다.
INSERT INTO table2 SELECT * FROM table1 WHERE
DELETE FROM table1 WHERE table1.id in (SELECT table2.id FROM table2)
WHERE 쿼리를 사용하여 선택하여 특정 레코드를 이동 및 삭제하려면,
BEGIN TRANSACTION;
Insert Into A SELECT * FROM B where URL="" AND email ="" AND Annual_Sales_Vol="" And OPENED_In="" AND emp_count="" And contact_person= "" limit 0,2000;
delete from B where Id In (select Id from B where URL="" AND email ="" AND Annual_Sales_Vol="" And OPENED_In="" AND emp_count="" And contact_person= "" limit 0,2000);
commit;
참조 URL : https://stackoverflow.com/questions/19821736/mysql-move-rows-from-one-table-to-another
반응형
'programing' 카테고리의 다른 글
Java 열거를 스트림으로 어떻게 전환합니까? (0) | 2021.01.16 |
---|---|
Jmap은 덤프를 만들기 위해 연결할 수 없습니다. (0) | 2021.01.16 |
Rails에서 jquery-ui 자동 완성을 설정하는 방법 (0) | 2021.01.16 |
IntegrityError 중복 키 값이 고유 제약 조건을 위반 함-django / postgres (0) | 2021.01.16 |
bash 스크립트를 데몬으로 실행 (0) | 2021.01.16 |