2010-03-27 8 views
8

Tôi có bảng cơ sở dữ liệu có ràng buộc khóa duy nhất được xác định để tránh các bản ghi trùng lặp xảy ra.Kiểm tra Bản ghi trùng lặp VS try/catch Ràng buộc khóa duy nhất

Tôi tò mò nếu thực hành không tốt để KHÔNG kiểm tra bản ghi trùng lặp theo cách thủ công trước khi chạy câu lệnh INSERT trên bảng.

Nói cách khác, tôi nên chạy câu lệnh SELECT sử dụng mệnh đề WHERE để kiểm tra các giá trị trùng lặp của bản ghi mà tôi sắp INSERT. Nếu một bản ghi được tìm thấy, sau đó không chạy câu lệnh INSERT, nếu không đi trước và chạy INSERT ....

HOẶC

Chỉ cần chạy câu lệnh INSERT và thử/bắt ngoại lệ có thể được ném do đối với vi phạm Khóa duy nhất.

Tôi cân nhắc hai quan điểm và không thể quyết định cái nào là tốt nhất 1. Không lãng phí cuộc gọi SELECT để kiểm tra trùng lặp khi tôi chỉ có thể bẫy ngoại lệ VS 2. Không được lười biếng bằng cách triển khai logic thử/nắm bắt xấu xí VS 3. ??? Suy nghĩ của bạn ở đây ??? :)

Trả lời

7

Bạn thực sự phải sử dụng phương pháp try..catch. Nó có thể ít thanh lịch hơn, nhưng nó không dễ dàng.

Nếu có nhiều hơn một khách hàng cập nhật bảng này, thì một khách hàng khác có thể chèn một bản ghi giữa séc của bạn và chèn của bạn. Bạn vẫn có thể kiểm tra xem bạn muốn, để tiết kiệm cố gắng để làm chèn không cần thiết. Nó có thể là một sự gia tăng hiệu suất nhỏ nếu đó là những gì bạn đang lo lắng về, nhưng chỉ khi có một bản sao. Nhưng mỗi khi có không phải là trùng lặp, bạn đã trả tiền phạt hiệu suất bằng cách thực hiện cả CHỌN và CH INSN.

Dù sao, tỷ lệ cược sẽ có vi phạm ràng buộc là gì? Có lẽ nhỏ, vậy tại sao phải bận tâm với việc kiểm tra?

3

Ngay cả khi bạn kiểm tra các mục trùng lặp, một mục mới có thể được chèn sau khi bạn kiểm tra và trước khi chèn, bạn vẫn cần khối try/catch.

3

Thử/nắm bắt an toàn hơn và có thể mở rộng hơn vì bạn chỉ chạm vào bảng một lần. Thử/nắm bắt loại bỏ lỗi xử lý lỗi một cách thẳng thắn trong các phiên bản trước

Xem lesson 4 from this article quá