Tôi đã sử dụng điều này trong một thời gian dài, nhưng tôi không thể tìm thấy lời giải thích rõ ràng về khi nó không được đảm bảo duy nhất. Dưới đây là ý kiến của tôi, xin vui lòng chính xác như bạn thấy phù hợp.Phương pháp nào để tạo GUID là tốt nhất để đảm bảo GUID thực sự là duy nhất?
Giá trị được đảm bảo là duy nhất (được tạo) trên máy được tạo. Vì vậy, GUID được tạo bởi ứng dụng .net trên máy sẽ không bao giờ xung đột với những ứng dụng được tạo bởi SQL Server trên cùng một máy.
Trong tất cả các trường hợp khác, không có sự đảm bảo nào. Về mặt lý thuyết, luôn luôn có thể nếu có nhiều nguồn tạo (nói các ứng dụng trên các máy tính khác nhau) cho trường định danh duy nhất trong một db trên một máy tính khác, có thể có các bản sao sẽ được chèn vào.
EDIT: Xin lỗi vì không tạo câu hỏi đúng cách. Tôi đoán tôi muốn biết xác suất của xung đột khi được tạo trên cùng một máy so với các máy khác nhau, nếu C# 's Guid.NewGuid()
, các chức năng newid()
, newsequentialid()
của SQL Server hoặc bất kỳ chức năng nào khác bằng các ứng dụng khác nhau được sử dụng. Các 'đã được trả lời' liên kết có một trong những câu trả lời, nơi nó nói rằng ông thực sự gặp phải một trường hợp xảy ra. Làm cho bạn tự hỏi tần suất có thể xảy ra.
Nếu tôi có một bảng có trường uniqueidentifier là pk, tôi có phải lo lắng về việc kiểm tra tính duy nhất mỗi khi tôi chèn bằng cách tạo một giá trị mới bằng các ứng dụng khác nhau hoặc chức năng của SQL Server?
Bạn nên đọc * Hướng dẫn GUID * chuỗi của Eric Lippert: http://blogs.msdn.com/b/ericlippert/archive/tags/guids/ – MarcinJuraszek
Hoặc ít nhất RFC - http: //www.apps.ietf .org/rfc/rfc4122.html –
Tôi chắc rằng bạn không hỏi về kiểu dữ liệu 'uniqueidentifier'. Bạn có thể hỏi về hàm newid', hoặc có lẽ là hàm 'newsequentialid'. Câu trả lời là hoàn toàn khác nhau cho hai chức năng này, và có lẽ cũng khác nếu bạn có ý nghĩa gì đó khác. – hvd