2012-02-21 28 views
0

最後に挿入されたUUID()プライマリキーをフェッチするために、PHP mysql_insert_idに相当するものはありますか? (私は常に0を得ます。)MySQLのUUID()主キーのPHP mysql_insert_id()?

+1

残念ながら、私はないと思いますが。また、mysql_ *関数の使用を中止し、代わりにmysqli_ *関数またはPDOオブジェクトを使用してください。 –

+0

これは、従来のPHPインストールのブレークサポート以外のものです... PDOにはこれが何かありますか? – ina

+0

「レガシー」とはどういう意味ですか? [Mysqli](http://us.php.net/manual/en/book.mysqli.php)は、かなりサポートされています。 –

答えて

0

いいえ、last_insert_id()は最後に生成されたauto_incrementフィールドのみを取得します。最初にselect uuid()を実行してから、そのuuidを使って挿入しなければなりません。

ただし、uuidsは一意になるとは保証されません。単に衝突する可能性はほとんどありません。一意性が必要な場合は、auto_incrementを使用してください。単一のテーブル内で決して再利用されることはありません。

+1

私はauto_incrementが異なるサーバに分割すると失敗すると思っていたので、UUIDの使用法は? – ina

+0

@ina yes、シャーディング(別のサーバーであるかどうかにかかわらず)は、パーティションを切り替えるとauto_incrementの失敗を引き起こす可能性があります。しかし、あなたがテーブルを分割( "シャード")すると、あなたのPKはauto_incrementの値にパーティショニングしているカラムを加えたものになります。 –

+0

私はまだ多くのシステムがユーザーのプライマリIDに対してUUIDを使用する理由を理解しようとしています。私はそれがデータベースが異なるサーバーにまたがっていると仮定し、UUIDのMACアドレスがデータがどのサーバーにあるかを判断するのに役立つと考えていました。しかし、IDが一意であり、拡大縮小可能であることが保証されている場合、なぜUUIDを使用しますか? – ina

0

私はこれは非常に短く、簡単な解決策が見つかりました:

set @id=UUID(); 
insert into <table>(<col1>,<col2>) values (@id,'another value'); 
select @id; 
関連する問題