SQL NEWID() - Diğer bir tanımla GUID

NEWID()

SQL Server'daki bir GUID, tam kimliğin bir başkası tarafından tesadüfen oluşturulma ve/veya kullanılma olasılığı en düşük olan benzersiz kimlikler oluşturabilir.

SQL Server'da GUID oluşturma yolunu anlamaya dalmadan önce, GUID'in kendisiyle ilgili bazı önemli kavramları anlamak gerekir. Öyleyse GUID'i kavramsal olarak anlayalım.

  • Benzersiz Tanımlayıcılar genel olarak iki kısaltma ile tanımlanır – GUID (Globally Unique Identifier) ​​ve UUID (Universally Unique Identifier). Her ikisi de aynı şeyi temsil eder – uzayda ve zamanda benzersiz olan benzersiz kimlikler.
  • GUID oluşturmanın belirtimi ve metodolojisi IETF tarafından tanımlanır ve belirtim RFC4122 olarak bilinir .
  • GUID'ler birden çok yolla oluşturulabilir. En yaygın olanları Rastgele sayı üretimine, Zaman saati sırasına, ağ kartlarının MAC adresli olduğu Donanım tabanlı ve MD5, AES, SHA ve diğerleri gibi yaygın karma algoritmaları kullanarak verilerin karma değerini hesaplayan İçerik tabanlıdır.
  • GUID'ler tipik olarak 128 bit boyutunda ve 32 basamak uzunluğundadır ve 8 basamak – 4 basamak – 4 basamak – 4 basamak – 12 basamak şeklindedir.
  • Yukarıdaki mekanizma kullanılarak, toplamda yaklaşık 10 38 GUID oluşturulabilir, bu da dünyadaki herkesin GUID'leri kişi başına trilyonlarca veri öğesi için kullanması için fazlasıyla yeterlidir.

Artık GUID'leri yeterince anladığımıza göre, SQL Server'da GUID oluşturma yöntemlerine odaklanmaya başlayabiliriz. SQL Server'da GUID'ler oluşturabileceğiniz iki işlev vardır – NewID ve NewSequentialID. Ve GUID'leri depolamak için kullanılabilecek bir veri türü - "uniqueidentifier" vardır. 16 baytlık bir ikili değer depolar.

GUID Oluşturmak için SQL Server NEWID

Benzersiz tanımlayıcı veri türünde bir değişken oluşturalım. Aşağıdaki kodu SSMS'ye yazın ve çalıştırın.

DECLARE @guid uniqueidentifier =  NEWID (); 
@guid'i 'GUID' olarak SEÇ ;			

Burada, benzersiz tanımlayıcı veri türü kılavuzu adında bir değişken oluşturduk. Benzersiz bir tanımlayıcı oluşturmak için, onu oluşturmak için varsayılan bir yöntem atamamız gerekiyor ve bunun için RFC4122 uyumlu bir GUID oluşturan ve döndüren NEWID işlevini kullandık. Yukarıdaki kodun çıktısı aşağıdaki gibi olacaktır. GUID'lerin herhangi bir zamanda küresel olarak benzersiz olması gerektiği için, makinenizde çalıştırdığınızda bu farklı olacaktır. Aslında, aynı kodu iki kez çalıştırdım ve her seferinde ortaya çıkan kimlik beklendiği gibi farklıydı. GUID oluşturmanın tüm amacı budur.

SQL Server'da örnek GUID
SQL Server'da örnek GUID

Yeni bir tablo oluştururken, aşağıda gösterildiği gibi NEWID'yi varsayılan işlev olarak atayarak benzersiz tanımlayıcı veri türünde bir alan oluşturabilirsiniz.

CREATE  TABLE Product_A
 ( benzersiz tanımlayıcı  varsayılan yeni kimlik  
( ), ürün adı 
varchar ( 50 ) )
			

Aşağıdaki kodu kullanarak bazı kayıtları bu tabloya ekleyin.

 Product_A'ya Ekle _( ürün adı )  değerler ( 'A1' )
 Ürün_A'ya Ekle ( productname )  değerler ( 'A2 ' ) 
Product_A'ya Ekle ( productname )  değerler ( 'A3 ' )
 Product_A'dan			 * seçin  

Çıktı aşağıda gösterildiği gibi olacaktır.

SQL Server'da GUID değerleri

Unutulmaması gereken bir nokta, GUID'ler / benzersiz tanımlayıcı veri türü üzerinde gerçekleştirebileceğiniz farklı işlemlerle ilgilidir. Yukarıdaki tabloda ID alanını sıralarsanız, benim durumumda sonuç aşağıda gösterildiği gibidir. Oluşturulan kimliklerin artan sırada olması gerekmez, bu nedenle verileri GUID'lere göre sıralarsanız, veriler eklediğiniz sırayla olmayabilir. SQL Server, GUID'leri tipik olarak GUID'nin 5. bölümünden 1. bölümüne doğru sıralar ve arama algoritması iyi belgelenmemiştir. NewID işlevi, GUID oluşturma mekanizmasının bir parçası olarak rasgeleliği (rastgele etkinlik) kullandı, bu nedenle oluşturulan her GUID'in sırayla veya daha yüksek değerlerde olacağı garanti edilemez.

SQL Server'da GUID'li Tablodan * SEÇİN

Ayrıca, GUID'lerde yalnızca karşılaştırma işleçleri desteklenir. Örneğin sum gibi bir toplama operatörü kullanmayı denerseniz aşağıdaki gibi bir hata ile karşılaşırsınız.

SQL Server'da GUID'ler SUM yapılamıyor - bir hataya neden oluyor

GUID Oluşturmak için SQL Server NEWSEQUENTIALID

SQL Server'da bulunan başka bir GUID işlevine bakalım – NEWSEQUENTIALID. Bu işlev, Windows başladığından beri aynı makinede bu işlev tarafından daha önce oluşturulmuş tüm GUID'lerden daha büyük bir GUID oluşturur. Sürekli olarak daha yüksek değerler üreten bu mekanizma, GUID'ler satır tanımlayıcıları olarak kullanıldığında çok uygundur. Newssequentialid fonksiyonunun bu özelliğini test edelim.

Yeni bir Product_B tablosu oluşturun ve Product_A tablosu için yaptığımız aynı adımları uygulayın. Yapılması gereken tek değişiklik, newid işlevi yerine newsequentialid işlevini kullanmaktır. Sonuç aşağıda gösterilen gibi olmalıdır.

GUID'ler oluşturmak için SQL Server'da newsequentialid işlevini kullanma

Bu yeni tabloyu sorguladığınızda ve ID alanına göre sıraladığınızda, sonuç, verileri tabloya eklediğiniz sırada olacaktır. Bunun nedeni, newsequentialid işlevinin GUID oluşturmanın bir parçası olarak rastgeleliği kullanmaması ve yine de kimliğin global olarak benzersiz olmasını ve aynı makinede son oluşturulan değerden daha büyük olmasını sağlamasıdır.

SQL Server'da GUID oluşturmayı doğrulayın

İki farklı ürün tablosuna veri eklemiş olup olmadığımızı ve bu tabloların her ikisinin de kimliklerini 1, 2 ve 3'ten başlattığı iki farklı departmana ait olup olmadığını düşünün. Union gibi bir operatör kullanarak her iki tablodaki verileri birleştirmeyi düşünseydik. veya birincil anahtar olarak kimliği olan üçüncü bir ortak tabloya her iki tablodan veri yüklemek, veriler yinelenen satır tanımlayıcılarına sahip olacağından hatalar üretebilirdi.

Bizim durumumuzda, kimliklerin global olarak benzersiz olması gerektiği ve bu verileri bir sorguda veya tabloda veya global olarak başka herhangi bir yerde kolayca birleştirebileceğiniz için bu bir endişe kaynağı olmayacaktır. Benim durumumda, Union operatörünü kullanarak iki tablodaki verileri ortak bir sonuç kümesinde birleştirmeye çalıştığımda, sonuç aşağıda gösterildiği gibi çıktı. 2, 3 ve 4 satırları, newsequentialid işlevi tarafından oluşturuldukları gibi bir dizideki tablo B'dendir. Buna karşılık, newid işlevi GUID'leri oldukça rasgele üretti ve değerler, newsequentialid işlevi tarafından oluşturulanlardan daha yüksek ve daha düşüktü.

SQL Server'daki son GUID değerleri

Her iki işlev de, GUID'leri rastgele veya sırayla oluşturmak isteyebileceğiniz farklı kullanım durumlarına hizmet eder. GUID, tanımlayıcı olarak kullanım için her zaman en uygun değildir. Örneğin, 6 bayt boyutlu bir satır için, tanımlayıcı olarak 16 bit GUID kullanmak istemeyebilirsiniz. GUID, boyutu açısından oldukça büyük olduğundan, diğer veri türlerini değerlendirmeyi düşünmeniz ve int, long ve diğerleri gibi diğer veri türlerinin amaca hizmet edemediği seçici senaryolar için bir GUID kullanılması önerilir.

Kaynak : https://www.mssqltips.com/sqlservertip/6002/what-is-a-guid-in-sql-server/

Yorumlar

Bu blogdaki popüler yayınlar

Asp.Net ile Uyarı Mesajları Vermek (msgbox)

Asp.Net ile T.C. Kimlik Doğrulama (Mernis) Web Service ile

Asp.Net Eval Kullanımı