Czy funkcja NEWID()
nigdy nie daje tego samego identyfikatora, co już zrobiła? Powiedzmy, że wybieram NEWID()
i zwraca mi "1" (tak jak przykład), czy już nigdy nie zwróci "1"? Czy to niemożliwe?Serwer SQL: czy NEWID() zawsze daje unikalny identyfikator?
Odpowiedz
Zarówno NEWID()
, jak i NEWQSEQUENTIALID()
nadają globalnie unikalne wartości typu uniqueidenitifier
.
NEWID()
dotyczy losowej aktywności, dlatego następna wartość jest nieprzewidywalna i jest wolniejsza do wykonania.
NEWQSEQUENTIALID()
nie obejmuje losowej aktywności, czyli the next generated value can be predicted (niełatwo!) I działa szybciej niż NEWID()
.
Tak więc, jeśli nie przejmujesz się przewidywaniem następnej wartości (ze względów bezpieczeństwa), możesz użyć NEWSEQUENTIALID()
. Jeśli obawiasz się przewidywalności lub nie masz nic przeciwko niewielkiej kardzie za wydajność, możesz użyć NEWID()
.
Jednak w ścisłym sensie nadal istnieją znikome szanse, że identyfikatory GUID generowane przez różne urządzenia mają tę samą wartość. W praktyce uważa się to za niemożliwe.
Jeśli chcesz dalsze informacje, przeczytaj to: Which method for generating GUID's is best for ensuring the GUID is really unique?
Uwaga NEWID()
zgodny RFC 4122. Druga funkcja wykorzystuje algorytm Microsoftu do generowania wartości.
Jeśli używasz NEWID()
na tym samym komputerze, wartość zwracana będzie zawsze unikatowa, ponieważ zawiera bieżący znacznik czasu w swoich obliczeniach.
Na oddzielnych maszynach/systemach można jednak technicznie uzyskać ten sam identyfikator, ale prawdopodobieństwo tego zdarzenia jest tak niskie, że dzisiejsza społeczność SQL DB zasadniczo zaakceptowała fakt, że jest to niemożliwe. Microsoft w mniejszym lub większym stopniu zapisał na nim swoją reputację.
Powiązane
Miałem to samo pytanie, więc wpadłem to proste zapytanie, aby zobaczyć, jak wyjątkowy newid() może być, jak zobaczysz nie ma powtarzających się identyfikatorów nawet w tym samym milisekundą:
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
Możesz zdefiniować @TRIES, jak chcesz.
To niewiele, ponieważ 1) interpreter T-SQL jest dość powolny, a 2) nie uzyskiwanie tych samych identyfikatorów w tej samej milisekundy nie dowodzi, że, powiedzmy, wartości nie będą poddane recyklingowi następnego dnia, następnego miesiąca lub następnego rok. Identyfikatory GUID * są * unikalne, ale ustalenie tego empirycznie nie jest praktyczne. –
dokładnie, ale to tylko przypomnienie. Wszystko zależy od tego, co chcesz zrobić i do czego potrzebujesz tych identyfikatorów. –
- 1. C# GUID i unikalny identyfikator SQL
- 2. Serwer SQL: dlaczego 15 znak GUID jest zawsze 4?
- 3. Czy istnieje odpowiednik funkcji SQL Server NewId()?
- 4. Kryptograficznie bezpieczny unikalny identyfikator
- 5. Znaczniki NFC unikalny identyfikator
- 6. lokalnie unikalny identyfikator
- 7. Czy istnieje unikalny identyfikator obiektu w Pythonie
- 8. newid() wewnątrz funkcji serwera sql
- 9. Identyfikator UDID urządzenia Android lub unikalny identyfikator?
- 10. Unikalny identyfikator pliku w oknach
- 11. Unikalny identyfikator sesji w pythonie
- 12. Jak uzyskać unikalny identyfikator JVM?
- 13. Czy można ustawić domyślną wartość kolumny na NewId() serwera SQL?
- 14. Jak wygenerować unikalny identyfikator żądania w Railsach?
- 15. request.GetResponse daje zawsze Timeout
- 16. Szynowe powiązania polimorficzne bez typu (unikalny identyfikator)
- 17. Jak wygenerować unikalny identyfikator w Dart
- 18. Unikalny identyfikator pliku Dropbox - RESTful API
- 19. Czy token urządzenia jest tak unikalny, jak identyfikator urządzenia?
- 20. Czy mogę pobrać unikalny identyfikator komputera serwera z plikiem node.js?
- 21. Jak wygenerować unikalny identyfikator obiektu w mongodb
- 22. iOS 8, PhotoKit, PHAsset, unikalny identyfikator
- 23. MySQL unikalny identyfikator lub łączone id
- 24. Android - unikalny i stały identyfikator urządzenia
- 25. Jak przypisać unikalny identyfikator elementu DOM
- 26. log4net unikalny identyfikator żądania w ASP.NET
- 27. Serwer SQL - zawiera niepoprawny identyfikator XML wymagany przez FOR XML;
- 28. Unikalny identyfikator (guid) jako klucz podstawowy w projekcie bazy danych
- 29. Jak dodać unikalny identyfikator dwukolumnowy do mongody w aplikacji meteorów?
- 30. Równoważnik identyfikatora SQL Server unikalny w C#
jeśli tak, zabrakło i kupić bilet na loterię. –
To nie jest niemożliwe, ale bardzo, mało prawdopodobne. –
Prawdopodobieństwo jest tak niskie, że dla wszystkich intencji i celów jest to niemożliwe. –