GUID SQL-сервера

В этом руководстве вы узнаете о GUID SQL Server и о том, как использовать функцию NEWID() для генерации значений GUID.

Введение в SQL Server GUID

Все вещи в нашем мире пронумерованы, например, книги имеют ISBN, автомобили — VIN-коды, а люди — номера социального страхования(SSN).

Числа, или идентификаторы, помогают нам ссылаться на вещи однозначно. Например, мы можем идентифицировать Джона Доу, используя его уникальный номер социального страхования 123-45-6789.

Глобальный уникальный идентификатор или GUID — это более широкая версия этого типа идентификационных номеров.

GUID гарантированно уникален для всех таблиц, баз данных и даже серверов.

В SQL Server GUID — это 16-байтовый двоичный тип данных, который генерируется с помощью функции NEWID():

SELECT 
    NEWID() AS GUID;

Если вы выполните приведенный выше оператор несколько раз, вы каждый раз увидите разные значения. Вот одно из них:

GUID
------------------------------------
3297F0F2-35D3-4231-919D-1CFCF4035975
(1 row affected)

В SQL Server тип данных UNIQUEIDENTIFIER содержит значения GUID.

Следующие операторы объявляют переменную с типом UNIQUEIDENTIFIER и присваивают ей значение GUID, сгенерированное функцией NEWID().

DECLARE 
    @id UNIQUEIDENTIFIER;
SET @id = NEWID();
SELECT 
    @id AS GUID;

Вот что получилось:

GUID
------------------------------------
69AA3BA5-D51E-465E-8447-ECAA1939739A
(1 row affected)

Использование SQL Server GUID в качестве первичного ключа

Иногда для первичного ключевого столбца таблицы предпочтительнее использовать значения GUID, а не целые числа.

Использование GUID в качестве первичного ключа таблицы дает следующие преимущества:

  • Значения GUID глобально уникальны для таблиц, баз данных и даже серверов. Поэтому это позволяет вам легко объединять данные с разных серверов.
  • Значения GUID не раскрывают информацию, поэтому их безопаснее использовать в публичном интерфейсе, таком как URL. Например, если у вас есть URL https://www.example.com/customer/100/, не так уж и сложно обнаружить, что там будут клиенты с идентификатором 101, 102 и т. д. Однако с GUID это невозможно: https://www.example.com/customer/F4AB02B7-9D55-483D-9081-CC4E3851E851/

Помимо этих преимуществ, хранение GUID в столбце первичного ключа таблицы имеет следующие недостатки:

  • Значения GUID(16 байт) занимают больше места, чем INT(4 байта) или даже BIGINT(8 байт)
  • Значения GUID затрудняют устранение неполадок и отладку, сравнивая WHERE id = 100 с WHERE id = 'F4AB02B7-9D55-483D-9081-CC4E3851E851'.

Пример GUID SQL Server

Сначала создайте новую таблицу с именем «Клиенты» в маркетинговой схеме:

CREATE SCHEMA marketing;
GO
CREATE TABLE marketing.customers(
    customer_id UNIQUEIDENTIFIER DEFAULT NEWID(),
    first_name NVARCHAR(100) NOT NULL,
    last_name NVARCHAR(100) NOT NULL,
    email VARCHAR(200) NOT NULL
);
GO

Во-вторых, вставьте новые строки в таблицу marketing.customers:

INSERT INTO 
    marketing.customers(first_name, last_name, email)
VALUES
   ('John','Doe',' [email protected] '),
   ('Jane','Doe',' [email protected] ');

В-третьих, запросите данные из таблицы marketing.customers:

SELECT 
    customer_id, 
    first_name, 
    last_name, 
    email
FROM 
    marketing.customers;

Вот что получилось:

Пример GUID SQL Server

В этом руководстве вы узнали о GUID SQL Server и о том, как использовать функцию NEWID() для генерации значений GUID.

Мирослав С.

Автор статей, ИБ-специалист