應用MySQL的LAST_INSERT_ID來肯定各分表的獨一ID值。本站提示廣大學習愛好者:(應用MySQL的LAST_INSERT_ID來肯定各分表的獨一ID值)文章只能為提供參考,不一定能成為您想要的結果。以下是應用MySQL的LAST_INSERT_ID來肯定各分表的獨一ID值正文
分表除表名的索引分歧以外,表構造都是一樣的,假如各表的‘ID'字段仍采取‘AUTO_INCREMENT'的方法的話,ID就不克不及唯肯定一筆記錄了。
這時候就須要一種處於各個分表以外的機制來生成ID,我們普通采取一張零丁的數據表(無妨假定表名為‘ticket_mutex')來保留這個ID,不管哪一個分表稀有據增長時,都是先到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 |
+------+-------+
檢查一切的記載:
+------+-------+
| name | value |
+------+-------+
| POST | 1 |
| USER | 1 |
+------+-------+
從上可以看出,經由過程MySQL的LAST_INSERT_ID機制,我們可以包管在記載總數不增加的情形下,讓營業ID在赓續的增長,從而包管了分表ID的獨一性。
4、LAST_INSERT_ID解釋
從名字可以看出,LAST_INSERT_ID即為最初拔出的ID值,依據MySQL的官方手冊解釋,它有2種應用辦法
一是不帶參數:LAST_INSERT_ID(),這類辦法和AUTO_INCREMENT屬性一路應用,當往帶有‘AUTO_INCREMENT'屬性字段的表中新增記載時,LAST_INSERT_ID()即前往該字段的值,年夜家可試下(我曾經驗證過);
二是帶有表達式:如下面引見的LAST_INSERT_ID(value+1),它前往的是表達式的值,即‘value+1';