質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

2回答

8370閲覧

UUIDが必ず重複する

退会済みユーザー

退会済みユーザー

総合スコア0

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2018/05/06 09:37

質問

以下のSQLを実行すると必ずUUIDが重複します。
どのようにすれば重複しない値が取得できますでしょうか?

sql

1select 2 REPLACE(UUID(), '-', '') 3from dual 4 5union 6select 7 REPLACE(UUID(), '-', '') 8from dual; 9/* 10 出力 11063ea187511111e8a0900201965f932a 12063ea7a5511111e8a0900201965f932a 13*/

環境

10.2.12-MariaDB

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/06 09:39

出力結果は重複値になっていないようですが・・?
退会済みユーザー

退会済みユーザー

2018/05/06 09:42

ほんとですね…!すみません、しっかりと見れていませんでした。毎回すごく似た異なる値が出力されていました><
m.ts10806

2018/05/06 09:43

その原因になりそうなところを見つけたので、回答に書きます。少々お待ちを。
guest

回答2

0

例え別のコンピュータからのアクセスであっても重複は起きない個別の識別子が出力されるようになっています。

UUID は、空間と時間においてグローバルに一意の数字として設計されています。UUID() の 2 回の呼び出しが、相互に接続されていない 2 台の異なるコンピュータ上で実行された場合でも、これらの呼び出しでは 2 つの異なる値が生成されると想定されます。

また、コメントでいただいた「すごく似た異なる値が出力される」については、
下記仕様が影響しているように思います。
※上記のドキュメントよりそのまま抜粋

  • 最初の 3 つの数字は、タイムスタンプから生成されます。
  • 4 番目の数字には、(たとえば、サマータイムが原因で) タイムスタンプ値の単調性が失われる場合に備えて、時間の一意性が保持されます。
  • 5 番目の数字は、空間の一意性を提供する IEEE 802 ノード番号です。(たとえば、ホストコンピュータに Ethernet カードが搭載されていないことや、オペレーティングシステム上のインタフェースのハードウェアアドレスを見つける方法がわからないことが原因で) 後者を使用できない場合は、ランダムな数字で置き換えられます。この場合、空間の一意性は保証できません。しかしそれでも、競合が発生する可能性は非常に低くなります。

つまり、同じ端末からの実行であれば、似ている近い値が出力されるのはおおよそ当然ということです(タイムスタンプなど、同時に実行したのであれば時間はほぼ同じですしね)

投稿2018/05/06 09:47

編集2018/05/06 09:49
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/06 09:57

ありがとうございます、UUIDについて深く理解することが出来ました。
guest

0

ベストアンサー

出力をしっかりと確認していませんでした。
重複しない、よく似た異なる値が出力されていました。

投稿2018/05/06 09:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/06 09:48

回答をしました。「なぜ似た値になるか」というのは知っておいても損はないと思いますよ。 時間がある時で結構ですのでお目通しください。
退会済みユーザー

退会済みユーザー

2018/05/06 15:24 編集

誰のかがこちらから分かりませんが(mts10806さんでは無いと思いますが)、なぜ低評価がつけられたのか理解できません。 また、「評価を下げる際はその理由を明確に伝える」とteratailに書かれています。不快です。
m.ts10806

2018/05/07 00:30 編集

確かに低評価をつけたのは私ではないですが、理由はなんとなく分からなくもないです。 ・ちゃんと見ていれば違う値であることは明白であった ・単に「見間違いでした」で終わるのではなく「なぜ似た値になったか」というところを突き詰めて解決済みとすべきだった  (UUIDで調べればおおよそすぐに出てくる解説だった→現に私の回答もドキュメントほぼそのままです) 私が回答をしてKyun001さんがコメントをした前後しばらくはKyun001さんの自己解決回答には低評価がついていなかったような記憶があるので、この回答で解決としてしまっているところに疑問を持たれる方がいたのではないでしょうか。(ベストアンサーは移し変えることができるので、なかなか移し変えられないことを以てマイナスをつけた という意味です) 低評価つけ逃げ(あまりいい表現ではないですが)は確かにモラル的には疑問があるものの その理由を投稿するのは強制ではないのであまり気にしなくても良いと思います。 もしコメントがつかなければ「なぜマイナスがついてしまったか」を考えるのも必要かなと。 コメントがつければラッキーくらいに私は思っています。「それくらい自分で考えろ」と思っている人も少なくないですし。 (もちろん誰が見ても回答になってない回答であればコメントもなしに否応無しに沢山マイナスがつくこともあります)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問