В этом руководстве вы узнаете о 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.