4

私は3つのテーブルを見ています。次のように6つの列があります。

ID | NAME | PRINCIPAL_ID | DESCRIPTION | GROUP_ID | TYPE

hibernateデータベースからデータを取得するために使用しているためID、このビューに列を配置する必要がありました。問題は、データを正しくロードするIDために必要と思われる一意のデータを生成できないことです。hibernate

このビューのすべての行に一意のIDを設定するにはどうすればよいですか?

たぶんこれが役立つかもしれませんが、よくわかりませんPRINCIPAL_ID:との組み合わせでGROUP_ID一意のIDを作成できます。これら3つはすべてLongです。

4

2 に答える 2

9

更新:それを数値として持つことを主張する場合は、次のようにビューを作成します。

SELECT
(@rownum:=@rownum + 1) AS rownumber,
yourTable.*
FROM
yourTable
, (SELECT @rownum:=0) r

しかし、それは本当にそれだけです-他の可能性はもうありません。コメントで言ったように行番号をキャストします。long実際には、そうである必要がありますlong

または、手順で:

DELIMITER $$
CREATE PROCEDURE selectFromWhatever()
BEGIN
SELECT
(@rownum:=@rownum + 1) AS rownumber,
yourTable.*
FROM
yourTable
, (SELECT @rownum:=0) r;
END $$
DELIMITER ;

次に、で結果を取得します

CALL selectFromWhatever()

元の答え:

MySQLマニュアルから:

UUID()

1997年10月にTheOpenGroupによって公開された「DCE1.1:リモートプロシージャコール」(付録A)CAE(Common Applications Environment)仕様に従って生成されたUniversal Unique Identifier(UUID)を返します(ドキュメント番号C706、 http://www.opengroup .org / public / pubs / catalog / c706.htm)。

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

UUIDは、aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee形式の5つの16進数のutf8文字列で表される128ビットの数値です。

最初の3つの数値は、タイムスタンプから生成されます。

4番目の数値は、タイムスタンプ値が単調性を失った場合(たとえば、夏時間のため)に時間的な一意性を保持します。

5番目の番号は、空間的な一意性を提供するIEEE802ノード番号です。後者が使用できない場合(たとえば、ホストコンピューターにイーサネットカードがない場合、またはオペレーティングシステムのインターフェイスのハードウェアアドレスを見つける方法がわからない場合)、乱数が代用されます。この場合、空間的な一意性は保証されません。それでも、衝突の可能性は非常に低いはずです。

現在、インターフェースのMACアドレスは、FreeBSDとLinuxでのみ考慮されています。他のオペレーティングシステムでは、MySQLはランダムに生成された48ビットの数値を使用します。

mysql> SELECT UUID(); -> '6ccd780c-baba-1026-9564-0040f4311e29'

警告

UUID()値は一意であることが意図されていますが、必ずしも推測できない、または予測できないわけではありません。予測不可能性が必要な場合は、UUID値を別の方法で生成する必要があります。ノート

UUID()は、ステートメントベースのレプリケーションでは機能しません。

もう1つの方法は、を使用CONCAT()して一意のIDを作成することです。

SELECT CONCAT(PRINCIPAL_ID, '-', GROUP_ID) AS myUniqueID
FROM yourTable
于 2012-11-29T09:49:11.603 に答える
1

代替手段は使用ですROW_NUMBER() OVER ()

SELECT ROW_NUMBER() OVER () AS ROW_NUM ... COLUMN... FROM TABLE
于 2021-01-20T02:19:17.100 に答える