> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL 用 vsql_uuid 拡張機能

> vsql_uuid 拡張機能は、ネイティブな 16 バイトの uuid カラム型を MySQL に追加し、バージョン 1、3、4、5、6、および 7 の UUID を SQL で生成します。

MySQL は UUID をテキストとして、または手作業で変換する `BINARY(16)` として格納します。
`vsql_uuid` は、16 バイトを保持し、おなじみの 36 文字形式で表示され、独自の比較規則で並べ替えられる本物の `uuid` カラム型を追加します。また、バージョン 1、3、4、5、6、および 7 を生成します。MySQL 自身の `UUID()` が生成するのはバージョン 1 だけです。

| | |
| - | - |
| **メンテナー** | VillageSQL |
| **ソースと完全なドキュメント** | [villagesql/vsql-uuid](https://github.com/villagesql/vsql-uuid) |
| **ライセンス** | GPL-2.0 |

## インストール

インストールスクリプト、Docker イメージ、またはリリース tarball で VillageSQL をインストールした場合、`vsql_uuid.veb` はすでにサーバーの `lib/veb/` ディレクトリにあります。1 つのステートメントでサーバーにインストールします。

```sql theme={null}
INSTALL EXTENSION vsql_uuid;
```

インストールされたことを確認します。

```sql theme={null}
SELECT EXTENSION_NAME
FROM INFORMATION_SCHEMA.EXTENSIONS
WHERE EXTENSION_NAME = 'vsql_uuid';
```

```
+----------------+
| EXTENSION_NAME |
+----------------+
| vsql_uuid      |
+----------------+
```

自分でビルドするには、[リポジトリ](https://github.com/villagesql/vsql-uuid)のビルド手順に従ってください。

## 追加される機能

### uuid 型

カラムを `uuid` として宣言します。16 バイトを占有し、主キーとして機能します。

```sql theme={null}
CREATE TABLE orders (
    id     uuid PRIMARY KEY,
    placed DATETIME,
    total  DECIMAL(8,2)
);
```

### 関数

| 関数 | 戻り値 | 説明 |
| - | - | - |
| `UUID_V1()` | `uuid` | 時刻ベース。ホストの MAC アドレスを使用 |
| `UUID_V1MC()` | `uuid` | 時刻ベース。MAC の代わりにランダムなマルチキャストアドレスを使用 |
| `UUID_V3(namespace, name)` | `uuid` | 名前ベース、MD5 |
| `UUID_V4()` | `uuid` | ランダム |
| `UUID_V5(namespace, name)` | `uuid` | 名前ベース、SHA-1 |
| `UUID_V6()` | `uuid` | 時刻順。1 つの接続内で単調増加 |
| `UUID_V7()` | `uuid` | Unix ミリ秒タイムスタンプに基づく時刻順 |
| `UUID_NIL()`, `UUID_MAX()` | `uuid` | すべてのビットが 0 の値と、すべてのビットが 1 の値 |
| `UUID_NS_DNS()`, `UUID_NS_URL()`, `UUID_NS_OID()`, `UUID_NS_X500()` | text | `UUID_V3` と `UUID_V5` のための RFC 9562 名前空間定数 |
| `UUID_IS_VALID(s)` | int | 文字列が `uuid` カラムに受け入れられる場合は 1、そうでない場合は 0 |
| `UUID_VERSION(u)` | int | バージョンのニブル |
| `UUID_TIMESTAMP(u)` | text | 埋め込まれた時刻を UTC の `'YYYY-MM-DD HH:MM:SS'` で返す。時刻を持たないバージョンでは NULL |
| `UUID_EPOCH(u)` | int | 同じ時刻を Unix 秒で返す |
| `UUID_COMPARE(a, b)` | int | -1、0、または 1 |

## 例

バージョン 7 の識別子を主キーとして使用すると、後に書き込まれた行が先に書き込まれた行の後に並びます。その後、バージョンを読み戻します。

```sql theme={null}
INSERT INTO orders VALUES (UUID_V7(), NOW(), 42.50);
DO SLEEP(0.01);
INSERT INTO orders VALUES (UUID_V7(), NOW(), 19.99);

SELECT UUID_VERSION(id) AS version, total FROM orders ORDER BY id;
```

```
+---------+-------+
| version | total |
+---------+-------+
|       7 | 42.50 |
|       7 | 19.99 |
+---------+-------+
```

名前から安定した識別子を導出します。

```sql theme={null}
SELECT UUID_V5(UUID_NS_DNS(), 'villagesql.com') AS dns_uuid;
```

```
+--------------------------------------+
| dns_uuid                             |
+--------------------------------------+
| fc51a94b-5261-5a4c-a5ec-48199b58d67b |
+--------------------------------------+
```

> [!NOTE]
>
> 上記の順序が保たれるのは、ミリ秒をまたぐ場合だけです。バージョン 7 は先頭にミリ秒のタイムスタンプを置き、残りをカウンターなしでランダムに埋めるため、同じミリ秒内に生成された 2 つの値は、互いにランダムな順序で並びます。そのため、この例では 2 つの行を別々のステートメントで挿入しています。それより細かい順序が必要な場合は `UUID_V6()` を使用してください。

> [!NOTE]
>
> `uuid` カラムは文字列リテラルを受け付けますが、文字列式は受け付けません。したがって、`INSERT INTO orders VALUES ('550e8400-e29b-41d4-a716-446655440000', ...)` は動作しますが、`INSERT INTO orders VALUES (UUID(), ...)` は `ERROR 3219 (HY000): Incorrect uuid value: cannot implicitly cast string
>     expression. Use explicit conversion for column 'id' at row 1` で失敗します。代わりに、上記のいずれかの関数で値を生成してください。

## 関連項目

* [MySQL での UUID](https://villagesql.com/docs/en/guides/uuids.md) — 各バージョンの用途と、どれを選ぶべきか
* [主キーの戦略](https://villagesql.com/docs/en/guides/primary-key-strategies.md) — UUID キーが役立つ場面と、コストになる場面
* [拡張機能のインストール](https://villagesql.com/docs/ja/extensions/install.md) — `INSTALL EXTENSION` の仕組みと、サーバーがバンドルを探す場所
* [利用可能な拡張機能](https://villagesql.com/docs/ja/extensions/catalog) — 完全なカタログ
* [villagesql/vsql-uuid](https://github.com/villagesql/vsql-uuid) — ソース、ビルド手順、および既知の制限事項


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.