Chức năng NEWID()
không bao giờ cho tôi cùng một ID như đã làm chưa? Hãy nói rằng tôi chọn một NEWID()
và nó trả về tôi '1' (giống như một ví dụ), nó sẽ không bao giờ trở lại '1' một lần nữa? Nó là bất khả thi?Máy chủ SQL: NEWID() có luôn cung cấp ID duy nhất không?
Trả lời
Cả hai NEWID()
và NEWQSEQUENTIALID()
cung cấp các giá trị duy nhất trên toàn cầu loại uniqueidenitifier
.
NEWID()
liên quan đến hoạt động ngẫu nhiên, do đó giá trị tiếp theo là không thể đoán trước và sẽ chậm hơn để thực thi.
NEWQSEQUENTIALID()
không liên quan đến hoạt động ngẫu nhiên, do đó the next generated value can be predicted (không dễ dàng!) Và thực thi nhanh hơn NEWID()
.
Vì vậy, nếu bạn không quan tâm đến giá trị tiếp theo được dự đoán (vì lý do bảo mật), bạn có thể sử dụng NEWSEQUENTIALID()
. Nếu bạn lo lắng về khả năng dự đoán hoặc bạn không nhớ đến hình phạt hiệu suất nhỏ bé, bạn có thể sử dụng NEWID()
.
Tuy nhiên, theo nghĩa hẹp, vẫn có những cơ hội không đáng kể mà GUID được tạo bởi các máy khác nhau có cùng giá trị. Trong thực tế, nó được coi là không thể.
Nếu bạn muốn biết thêm thông tin, đọc: Which method for generating GUID's is best for ensuring the GUID is really unique?
Note NEWID()
tuân RFC 4122. Và hàm kia sử dụng thuật toán của Microsoft để tạo ra giá trị.
Nếu bạn đang chạy NEWID()
trên cùng một máy thì giá trị trả về sẽ luôn là duy nhất vì nó kết hợp dấu thời gian hiện tại trong tính toán của nó. Tuy nhiên,
Trên các máy/hệ thống riêng biệt, bạn có thể về mặt kỹ thuật có cùng id nhưng xác suất xảy ra quá thấp đến mức cộng đồng SQL DB ngày nay đã chấp nhận rằng không thể. Microsoft có nhiều hay ít ngân hàng của họ nổi tiếng trên đó.
liên quan
Tôi có cùng một câu hỏi, vì vậy tôi chạy truy vấn đơn giản này để xem cách độc đáo newid() có thể là, như bạn sẽ thấy không có ID lặp lại ngay cả trong cùng một milisecond:
DECLARE @TRIES BIGINT, @ID UNIQUEIDENTIFIER, @REPEATED_ID UNIQUEIDENTIFIER
SET @TRIES = 1
SET @REPEATED_ID=NEWID()
WHILE @TRIES <= 1000
BEGIN
SET @ID=NEWID()
IF @[email protected]
PRINT 'SAME -> ID '+CONVERT(NVARCHAR(MAX),@TRIES)+': '+ CONVERT(CHAR(36),@ID)
ELSE
PRINT 'DISTINCT -> ID '+CONVERT(NVARCHAR(MAX),@TRIES)+': '+ CONVERT(CHAR(36),@ID) + ' AT ' + CONVERT(VARCHAR,CAST(GETDATE() AS DATETIME2(3))
)
SET @TRIES += 1
SET @[email protected]
END
Bạn có thể xác định @TRIES như bạn muốn.
Điều đó chứng tỏ rất ít, bởi vì 1) Trình thông dịch của T-SQL khá chậm và 2) không nhận được cùng một ID trong cùng một phần nghìn giây không chứng minh rằng, các giá trị sẽ không được tái chế vào ngày hôm sau hoặc tháng sau, hoặc tiếp theo năm. GUID * là * duy nhất, nhưng việc thiết lập theo kinh nghiệm đó không thực tế. –
chính xác, nhưng đây chỉ là hướng dẫn. Tất cả phụ thuộc mà bạn muốn làm và cho những gì bạn cần ID này. –
- 1. newid() bên trong chức năng máy chủ sql
- 2. Phân vùng máy chủ SQL - Lỗi chỉ mục duy nhất
- 3. Nhà cung cấp 'SQLNCLI' không được đăng ký trên máy cục bộ, máy chủ sql 2012
- 4. Cần tập trung câu lệnh SQL trên sự kết hợp của bảng nhưng mục luôn luôn với ID duy nhất
- 5. Làm thế nào để tạo và chèn thủ công một bộ định danh duy nhất trong máy chủ sql?
- 6. Máy chủ SQL: Trả về bộ định danh duy nhất từ thủ tục lưu sẵn
- 7. LocationManager: nhà cung cấp "mạng" có luôn được bật không?
- 8. Google có phải là nhà cung cấp OpenID duy nhất yêu cầu "identifier_select" không?
- 9. Các Id cơ sở dữ liệu máy chủ SQL luôn tích cực?
- 10. Tạo ID duy nhất cho một máy tính cụ thể
- 11. Tạo ID duy nhất
- 12. Chạy nhiều máy chủ MySQL trên một máy duy nhất
- 13. Máy chủ/nhà cung cấp OpenID cho Django
- 14. Máy chủ SQL cung cấp tràn số học khi tính toán avg
- 15. Tìm nạp mô hình Backbone duy nhất từ máy chủ
- 16. Hạ cấp máy chủ SQL 2008 sang SQL Server 2005
- 17. Android Service.startForeground KHÔNG tôn trọng id thông báo duy nhất
- 18. Tạo một id duy nhất
- 19. tạo các id duy nhất trong hive
- 20. có khoá ngoại luôn luôn tham chiếu đến khóa duy nhất trong bảng khác không?
- 21. TypeMismatchException ID được cung cấp có kiểu sai
- 22. Biến máy chủ HTTP_HOST có luôn được xác định không?
- 23. Đếm (*) so với Đếm (Id) trong máy chủ sql 2005
- 24. Không thể chạy thử nghiệm duy nhất với nhà cung cấp dữ liệu trong PHPUnit
- 25. Không thể giải quyết máy chủ: bitbucket.org; nodename cũng không servname cung cấp, hoặc không biết
- 26. ID đối tượng khóa máy chủ Sql quá lớn
- 27. ID duy nhất cho mỗi người dùng trong Android
- 28. Máy chủ SQL: NẾU CÓ; ELSE
- 29. Cách tạo ID yêu cầu duy nhất trong Rails?
- 30. Id duy nhất của hoạt động android
nếu có, hãy chạy ra ngoài và mua vé số. –
Nó không phải là không thể, nhưng _highly_ không. –
Xác suất là quá thấp, cho tất cả các ý định và mục đích nó là không thể. –