Làm cách nào để hợp nhất hai bảng MySQL có cùng cấu trúc?
Các khóa chính của hai bảng sẽ xung đột, vì vậy tôi đã tính đến điều đó.
Làm cách nào để hợp nhất hai bảng MySQL có cùng cấu trúc?
Các khóa chính của hai bảng sẽ xung đột, vì vậy tôi đã tính đến điều đó.
Câu trả lời:
Bạn cũng có thể thử:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
cho phép các hàng đó trong bảng_1 thay thế các hàng trong bảng_2 có khóa chính phù hợp, trong khi vẫn chèn các hàng có khóa chính mới.
Ngoài ra,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
sẽ cập nhật các hàng đã có trong bảng_1 bằng hàng tương ứng từ bảng_2, đồng thời chèn các hàng có khóa chính mới.
Nó phụ thuộc vào ngữ nghĩa của khóa chính. Nếu nó chỉ là autoincrement, thì hãy sử dụng một cái gì đó như:
insert into table1 (all columns except pk)
select all_columns_except_pk
from table2;
Nếu PK có nghĩa là gì đó, bạn cần tìm cách xác định bản ghi nào cần được ưu tiên. Trước tiên, bạn có thể tạo một truy vấn chọn lọc để tìm các bản sao (xem câu trả lời của cpitis ). Sau đó, loại bỏ những cái bạn không muốn giữ lại và sử dụng phần chèn ở trên để thêm các bản ghi còn lại.
INSERT
INTO first_table f
SELECT *
FROM second_table s
ON DUPLICATE KEY
UPDATE
s.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH(f.column1)
Syntax error, unexpected IDENT_QUOTED
- thông qua MySQL Workbench dù sao.
Nếu bạn cần làm điều đó theo cách thủ công, một lần:
Đầu tiên, hợp nhất trong một bảng tạm thời, với một cái gì đó như:
create table MERGED as select * from table 1 UNION select * from table 2
Sau đó, xác định các ràng buộc khóa chính bằng một số thứ như
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
Trong đó PK là trường khóa chính ...
Giải quyết các bản sao.
Đổi tên bảng.
[đã chỉnh sửa - đã loại bỏ dấu ngoặc trong truy vấn UNION gây ra lỗi trong nhận xét bên dưới]
Không phức tạp như nó có vẻ .... Chỉ cần để lại khóa chính trùng lặp khỏi truy vấn của bạn .... điều này phù hợp với tôi!
INSERT INTO
Content(
`status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
)
SELECT `status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
FROM
Content_Images
Bạn có thể viết một kịch bản để cập nhật FK cho bạn .. hãy xem blog này: http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/
Họ có một tập lệnh thông minh để sử dụng các bảng information_schema để lấy các cột "id":
SET @db:='id_new';
select @max_id:=max(AUTO_INCREMENT) from information_schema.tables;
select concat('update ',table_name,' set ', column_name,' = ',column_name,'+',@max_id,' ; ') from information_schema.columns where table_schema=@db and column_name like '%id' into outfile 'update_ids.sql';
use id_new
source update_ids.sql;