なぜ AUTO_INCREMENT を使用するのですか?
顧客テーブルと注文テーブルをもう一度調べてみましょう。 Customers テーブル内の顧客は cust_id 列によって一意に識別され、各顧客には一意の番号があります。同様に、orders テーブル内の各注文には一意の注文番号があり、列 order_num に格納されます。これらの番号は一意であるということ以外に特別な意味はありません。新しい顧客または新しい注文を追加する場合は、新しい顧客 ID または注文番号が必要です。これらの番号は、一意であれば任意に指定できます。
明らかに、使用する最も単純な数値は次の数値です。いわゆる次の数値は、現在の最大数値より大きい数値です。たとえば、cust_id の最大数が 10005 の場合、テーブルに挿入される次の顧客の cust_id は 10006 になります。
それは簡単ですか?必ずしも。次に使用する値をどのように決定しますか?もちろん、SELECT ステートメントを使用して (Max() 関数を使用して) 最大の数値を見つけ、それに 1 を加算することもできます。しかし、これは信頼できません (実行する SELECT ステートメントと INSERT ステートメントの間に他の人が行を挿入しないようにする方法を見つける必要があります。これはマルチユーザー アプリケーションの場合によくあります)。また、あまり効率的ではありません (追加の MySQL 操作を実行する必要があります)。決して理想的ではありません)。
ここで AUTO_INCREMENT が活躍します。次のコード行 (customers テーブルの作成に使用される CREATE TABLE ステートメントの一部) を考えてみましょう。
cust_id int NOT NULL AUTO_INCREMENT,
AUTO_INCREMENT 使用法
AUTO_INCREMENT は、行が追加されるたびにこのカラムが自動的にインクリメントされることを MySQL に伝えます。 INSERT 操作が実行されるたびに、MySQL は自動的にカラムをインクリメントし (したがってキーワード AUTO_INCREMENT)、次に使用可能な値をカラムに割り当てます。これにより、各行に主キー値として使用できる一意の cust_id が割り当てられます。
注:
テーブルごとに許可される AUTO_INCREMENT カラムは 1 つだけであり、(主キーにするなどして) インデックスを作成する必要があります。 AUTO_INCREMENT のオーバーライド 列が AUTO_INCRE-MENT として指定されている場合、特別な値を使用する必要がありますか? INSERT ステートメントで値を指定するだけで、それが一意である限り (これまで使用されていない限り)、その値が自動的に生成された値の代わりに使用されます。後続の増分は、この手動で挿入された値を使用して開始されます。
短所:
AUTO_INCREMENT 値の決定 MySQL に主キーを (自動インクリメント経由で) 生成させることの欠点の 1 つは、値が誰であるかわからないことです。
select last_insert_id() 関数
次のシナリオを考えてみましょう: 新しい注文を追加しています。これには、orders テーブルに行を作成してから、注文された商品ごとに orderitms テーブルに行を作成する必要があります。 order_num は、注文の詳細とともに orderitems テーブルに保存されます。これが、orders テーブルと orderitems テーブルが関連テーブルである理由です。これには明らかに、orders 行を挿入した後、orderitems 行を挿入する前に、結果の order_num を知っている必要があります。
それでは、AUTO_INCREMENT 列を使用するときにこの値をどのように取得するのでしょうか?この値は、以下に示すように last_insert_id() 関数を使用して取得できます。
select last_insert_id()
このステートメントは最後の AUTO_INCREMENT 値を返し、後続の MySQL ステートメントで使用できます。
【関連おすすめ】
PHP中国語ウェブサイトの特別推奨: phpプログラマーツールボックスのダウンロード(ワンクリックでphp環境を構築)
mysqlデータベースの主キーの詳細な説明
以上がmysqlの自動増加するAUTO_INCREMENTインスタンスの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。