Hướng dẫn di chuyển dữ liệu qua bảng khác trong PHP

Xem: 353    Tải: 0   Thảo luận: 0   Mục: Php&mySql   Lĩnh vực: Khác

9 điểm   ( 2 đánh giá ) File đã được kiểm thử


Khi cần chuyển các bản ghi từ một bảng này sang một bảng khác, bạn có hai cách làm: dùng lệnh INSERT INTO … SELECT FROM…; hoặc dùng SELECT INTO…FROM… Mỗi cách có ưu điểm và nhược điểm riêng, cũng như có phạm vi ứng dụng nhất định. Khi lượng dữ liệu cần di chuyển càng lớn thì sự khác biệt giữa hai cách làm càng rõ.

Cách 1:

SELECT Cot1, Cot2, Cot3
INTO Bang2
FROM Bang1

Kết quả của câu lệnh này là bảng Bang2 được tạo ra và chứa các bản ghi của bảng Bang1. Nếu Bang2 đã tồn tại, lệnh sẽ báo lỗi và dừng. Các cột được tạo trong Bang2 sẽ có kiểu dữ liệu copy từ cột tương ứng trong Bang1. Trong trường hợp bạn muốn đổi kiểu dữ liệu, bạn có thể dùng hàm CAST:

SELECT Cot1, Cot2, CAST(Cot3 AS INT) AS Cot3
INTO Bang2
FROM Bang1

Bang2 được tạo ra cũng “trần trụi” – không có khóa chính, index, identity… các cột cũng luôn là cho phép NULL.
Ưu điểm lớn nhất của phương pháp này là nó có tốc độ thực hiện rất nhanh. Nó không phải ghi vào transaction log (và do đó không rollback được) vì thế việc thực thi của nó rất gọn nhẹ. Ở các phiên bản SQL Server cũ (2000 trở về trước), phương pháp này đòi hỏi khóa (lock) vào toàn bộ cấu trúc của database. Vì thế trong thời gian câu lệnh thực thi, các connection khác không thực hiện được các lệnh thay đổi schema (sửa bảng, tạo index…). Điều này đã không còn đúng nữa ở các phiên bản gần đây hơn (hình như từ bản 2000 Service Pack 4). Đây là điều mà khá nhiều người vẫn lầm tưởng và hạn chế sử dụng phương pháp này.
Tuy nhiên phương pháp này đòi hỏi phải tạo bảng mới, nên bạn không thể dùng nếu muốn insert thêm dữ liệu vào bảng đã có sẵn. Đồng thời việc tạo bảng mới cũng làm mất tính ổn định của schema (schema instability). Trong môi trường production đây là nhược điểm lớn nhất, đặc biệt bạn không thể dùng cho các tính năng mà nhiều người cùng sử dụng (ví dụ hai người đồng thời dùng một tính năng ở website dẫn đến câu lệnh này được gọi, lần gọi sau sẽ báo lỗi vì Bang2 đã tồn tại).
Phương pháp này thích hợp với các tác vụ ad hoc hoặc chạy theo batch và không có giao tiếp với người dùng. Khi đó thường dữ liệu cần xử lý với lượng lớn và đây chính là yếu tố mà phương pháp này phát huy hiệu quả.

Cách 2 :

INSERT INTO Bang2(Cot1, Cot2, Cot3)
SELECT Cot1, Cot2, Cot3
FROM Bang1

Đây là cách làm mà có lẽ nhiều người cho là mẫu mực và an toàn. Nó đòi hỏi bảng Bang2 phải tồn tại sẵn và có cấu trúc phù hợp với các trường trong lệnh SELECT. Vì Bang2 cần được tạo từ trước nên khi tạo bảng bạn có thể định nghĩa khóa, index, identity…
Phương pháp này cho phép nhiều người dùng cùng thực hiện, không gây xáo trộn schema, và có thể rollback khi nằm trong 1 transaction do nó dùng transaction log. Vì thế ở các hệ thống giao dịch với người dùng đây là cách bạn nên áp dụng.
Tuy nhiên nhược điểm của phương pháp này là do nó dùng transaction log nên khi áp dụng với lượng dữ liệu lớn nó thực hiện rất chậm.

Hướng dẫn di chuyển dữ liệu qua bảng khác trong PHP

Hướng dẫn di chuyển dữ liệu qua bảng khác trong PHP Đăng ngày 24-09-2016  Khi cần chuyển các bản ghi từ một bảng này sang một bảng khác, bạn có hai cách làm: dùng lệnh INSERT INTO … SELECT FROM…; hoặc dùng SELECT INTO…FROM… 4.5/10 353

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 

File tải nhiều nhất

Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2016. All rights reserved. Bản quyền thuộc VinaGon
Địa chỉ: Số 38 Hàng Bè, Hàng Bạc, Hoàn Kiếm, Hà Nội.
Văn phòng giao dịch: Phòng 28, Tầng 6, HH1A Linh Đàm, Hoàng Mai, Hà Nội
Email: info@vinagon.com | Website: www.vinagon.com | Điện thoại: (+844) 6. 32.979.36;
logo megacode

Megacode đã đăng ký với Bộ Công Thương
Thư viện mã nguồn mở lớn nhất Việt Nam.



Hỗ trợ khách hàng trên Megacode
Hỗ trợ kỹ thuật cho thành viên:
Tổng đài: (+844) 6. 32.979.36
Số di động (Hotline): 0969.091.265
Thời gian làm việc:
Sáng: 8h-12h; Chiều: 13h30-17h30
(Nghỉ chiều T7, CN và các ngày lễ, tết)
Chat với Megacode
https://www.facebook.com/megacodevn