MySQLのLAST_を使うINSERT_IDは、各サブテーブルの一意のID値を決定する


SQLデータテーブル構造では、一般的に「AUTO_INCREMENTは属性の「ID」フィールドを拡張し、データテーブルの各レコードがこのIDで一意に決定できることを確保する.
データの拡張に伴い、データベースのクエリー性能を向上させ、クエリーのホットスポットを低減するために、一般的に1枚のテーブルを一定の規則に従って複数のデータテーブル、すなわちよく言われるテーブルに分ける.
サブテーブルは、テーブル名のインデックスが異なる以外は、テーブル構造が同じであり、各テーブルの「ID」フィールドに「AUTO_INCREMENT'の方式では、IDが1つのレコードだけを特定することはできません.
この場合、IDを生成するには、各分割テーブルの外にあるメカニズムが必要です.このIDを保存するには、通常、個別のデータテーブル(テーブル名を「ticket_mutex」と仮定してもよい)を採用します.どの分割テーブルにデータが増加した場合でも、ticket_mutexテーブルはID値に1を加えてID値を取得する.
このIDを取る操作は複雑に見えますが、幸いなことにMySQLはLAST_を提供しています.INSERT_IDメカニズムは、一歩で完成させることができます.1、新規データテーブルticket_mutex
CREATE TABLE ticket_mutex (
    name varchar(32) NOT NULL PRIMARY KEY COMMENT '    ',
    value bigint(20) UNSIGNED NOT NULL COMMENT 'ID '
)Engine=InnoDB DEFAULT CHARSET=UTF8 COMMENT '    ID ';

フィールド「name」は、このIDがどのビジネスであるかを説明するために使用されます.例えば、「ユーザー」のIDは、「USER」とすることができます.フィールド「value」は、ビジネスのID値です.2、初期化業務とそのID値
INSERT INTO ticket_mutex(name, value) values('USER', 0),('POST', 0);
+------+-------+
| name | value |
+------+-------+
| POST |     0 |
| USER |     0 |
+------+-------+

2つのレコードを初期化しました.すなわち、2つの異なるビジネスがあり、それぞれ「ユーザー情報」と「テーマ情報」を表し、それらの初期ID値はいずれも「0」です.3、サブテーブルのユニークIDを取得するときはMySQLが提供するLAST_を利用するINSERT_ID()メカニズムになりました.ユーザー・テーブルにデータを追加する場合は、「ユーザーID」を取得します.
UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name='USER';SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 |
+------------------+

この文を使用すると、結果は1になります.この値が必要な値です.データ記録を見ると、記録総数は変わっていないが、「ユーザー」のIDは1になっている.
 
+------+-------+
| name | value |
+------+-------+
| POST |     0 |
| USER |     1 |
+------+-------+

同じ方法で、「トピック」のIDを取得できます.
UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name='POST';SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 |
+------------------+

すべてのレコードを表示:
+------+-------+
| name | value |
+------+-------+
| POST |     1 |
| USER |     1 |
+------+-------+
 
上から分かるようにMySQLのLAST_INSERT_IDメカニズムは、記録総数が増加しない場合に、業務IDを絶えず増加させることを保証し、分表IDの一意性を保証することができる.4、LAST_INSERT_ID説明名前からわかるようにLAST_INSERT_IDは最後に挿入されたID値です.MySQLの公式マニュアルによると、パラメータなしで使用する方法は2つあります.1つはLAST_INSERT_ID()、この方法とAUTO_INCREMENT属性を一緒に使用し、「AUTO_INCREMENT’属性フィールドのテーブルに新規レコードが追加された場合、LAST_INSERT_ID()はこのフィールドの値を返します.試してみてください.2つ目は、上記のLAST_のように式があります.INSERT_ID(value+1)は、式の値である「value+1」を返します.皆さんの批判と指摘を歓迎します.http://obullxl.iteye.com http://www.cnblogs.com/obullxl http://hi.baidu.com/obullxl -----------------------