В этом руководстве вы узнаете о 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 и о том, как использовать функцию NEWID() для генерации значений GUID.




