2011-01-12 4 views
3

Drupalノードに似た、データベースに追加された各アイテムに一意のIDを設定したいとします。私のデータベースに新しいアイテムを追加するときに、次の数字がどうなるかをどうやって知っているのか分かりません。 MySQLのなステートメントは次のとおりです。私は考えていMySQLデータベースの行の一意のIDを設定する

$query = "INSERT INTO `HERDSIRES`(uid, name, color, gender) VALUES (VALUE of next uid, '$name', '$color', '$gender')"; 

私は前にINSERTにデータベースを照会し、最後のUIDのどのような値を見つけると、それに1を追加し、変数にそれを保存する必要があります。これが最善の方法であるかどうかは分かりません。

ご意見はありますか?

答えて

6

カラムがデータベースによって自動的に生成されるように設定されている場合は、INSERT文にnullを渡すだけで、MySQLは残りの処理を行います。

たとえば、プライマリキーの列には、auto_incrementが指定されています。

INSERT INTO `HERDSIRES`(uid, name, color, gender) 
VALUES (null, '$name', '$color', '$gender')"; 

それとも、とにかくフィールドを列挙しているので、あなたはそれを完全に省略することができます::

ユアーズだろう

INSERT INTO `HERDSIRES`(name, color, gender) 
VALUES ('$name', '$color', '$gender')"; 

編集:ここから最後の自動生成IDを取得するためにPHPを使用する方法ですテーブル:

$query = mysql_query('INSERT INTO ...'); 
$new_row_id = mysql_insert_id(); 

// do something with $new_row_id 
+0

申し訳ありませんが、これを残しました。私は別のテーブルに同じアイテムの異なる部分を追加しています。私は別のテーブルからすべてのデータを呼び出すときにこのUIDを使用するつもりです。 – Denoteone

+1

その場合、最初の行を挿入してからmysql_insert_id()を使い、次のクエリでその値を使用します。そのPHP関数は、別の答えで言及されているMySQL関数 'LAST_INSERT_ID()'の代理です。私はそれを含めるために上記の答えを更新しました。 – futureal

+0

InnoDBを使用している場合、MySQLのAUTO_INCREMENTに注意してください。あなたがInnoDBを使用しているなら、MySQLではAUTO_INCREMENTは恐ろしいことです。https://dev.mysql.com/doc/refman/5.6/en/innodb-auto-increment-handling.html –

2

autoincrementを使用できない理由はありますか? SQLによって自動的に処理されます。

+1

サーバーの再始動の間に最後のレコード値は保持されません。したがって、500レコードから始め、100レコードを削除してMySQLを再起動すると、MySQLは現在のレコード数+1をカウントして次のレコード番号を再計算します。つまり、AUTO_INCREMENTは、 AUTO_INCREMENT変数を保持し、再起動時にAUTO_INCREMENT変数を使用します(AUTO_INCREMENTを使用するテーブルの場合)。 –

1

テーブルのフィールドを自動インクリメントに設定してから、挿入時にフィールドを設定しないでください。

1

ルックは時:LAST_INSERT_ID()については

How to Get the Unique ID for the Last Inserted Row

、最も 最近生成されたIDは、接続ごとに サーバーで維持されています。 他のクライアントは変更しません。 ノンマジック値(つまり、 がNULLでなく0でない値)を持つ別のAUTO_INCREMENT列を更新すると、変更されません。複数の クライアントから同時に LAST_INSERT_ID()およびAUTO_INCREMENT 列を使用すると完全に有効です。各 クライアントは、クライアント が最後に実行したステートメントの最後に挿入された IDを受け取ります。

+0

アイテムのデータを別のテーブルに挿入する場合、LAST_INSERT_ID()を使用できますか? (申し訳ありませんが私はそれを残した)ので、1つのテーブルはちょうど名前が追加され、UIDは、他のテーブルは、UIDと残りの情報を持っています。 – Denoteone

+1

LAST_INSERT_ID()はAUTO_INCREMENT列で機能します。 LAST_INSERT_ID()は、最後に実行されたINSERT文またはUPDATE文によってAUTO_INCREMENT列に設定された最初に自動的に生成された値を返します。 – NAVEED

関連する問題