小編給大家分享一下如何使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比哈巴河網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式哈巴河網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋哈巴河地區(qū)。費用合理售后完善,10年實體公司更值得信賴。
MySQL數(shù)據(jù)表結(jié)構(gòu)中,一般情況下,都會定義一個具有‘AUTO_INCREMENT’擴展屬性的‘ID’字段,以確保數(shù)據(jù)表的每一條記錄都可以用這個ID唯一確定;
隨著數(shù)據(jù)的不斷擴張,為了提高查詢性能,降低查詢熱點,一般都會把一張表按照一定的規(guī)則分成多張數(shù)據(jù)表,即常說的分表;
分表除了表名的索引不同之外,表結(jié)構(gòu)都是一樣的,如果各表的‘ID’字段仍采用‘AUTO_INCREMENT’的方式的話,ID就不能唯確定一條記錄了。
這時就需要一種處于各個分表之外的機制來生成ID,我們一般采用一張單獨的數(shù)據(jù)表(不妨假設(shè)表名為‘ticket_mutex’)來保存這個ID,無論哪個分表有數(shù)據(jù)增加時,都是先到ticket_mutex表把ID值加1,然后取得ID值。
這個取ID的操作看似很復(fù)雜,所幸的是,MySQL提供了LAST_INSERT_ID機制,讓我們能一步完成。
1、新建數(shù)據(jù)表ticket_mutex
view sourceprint?CREATE TABLE ticket_mutex (
name varchar(32) NOT NULL PRIMARY KEY COMMENT 業(yè)務(wù)名稱,
value bigint(20) UNSIGNED NOT NULL COMMENT ID值
)Engine=InnoDB DEFAULT CHARSET=UTF8 COMMENT 保存分表ID表;
字段‘name’用來說明這個ID是哪個業(yè)務(wù)的,比如‘用戶’的ID,我們可以定為‘USER’;
字段‘value’即該業(yè)務(wù)的ID值。
2、初始化業(yè)務(wù)和其ID值
view sourceprint?INSERT INTO ticket_mutex(name, value) values(USER, 0),(POST, 0);
+------+-------+
| name | value |
+------+-------+
| POST | 0 |
| USER | 0 |
+------+-------+
我們初始化了2條記錄,即有2個不同的業(yè)務(wù),分別代表‘用戶信息’和‘主題信息’,它們初始ID值均為‘0’;
3、獲取分表唯一ID
這個時候就要利用MySQL提供的LAST_INSERT_ID()機制了。
在往用戶表里新增一條數(shù)據(jù)時,獲取‘用戶ID’:
view sourceprint?UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name=USER;SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
通過這條語句之后,我們得到結(jié)果為1,這個值就是我們所需要的值。再來查看數(shù)據(jù)記錄,我們發(fā)現(xiàn)記錄總數(shù)沒有改變,但是‘用戶’的ID已經(jīng)為1了;
view sourceprint?+------+-------+
| name | value |
+------+-------+
| POST | 0 |
| USER | 1 |
+------+-------+
同樣的方法,我們可獲取‘主題’的ID:
view sourceprint?UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name=POST;SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+
查看所有的記錄:
view sourceprint?+------+-------+
| name | value |
+------+-------+
| POST | 1 |
| USER | 1 |
+------+-------+
從上可以看出,通過MySQL的LAST_INSERT_ID機制,我們可以保證在記錄總數(shù)不增長的情況下,讓業(yè)務(wù)ID在不斷的增加,從而保證了分表ID的唯一性。
4、LAST_INSERT_ID說明
從名字可以看出,LAST_INSERT_ID即為最后插入的ID值,根據(jù)MySQL的官方手冊說明,它有2種使用方法
一是不帶參數(shù):LAST_INSERT_ID(),這種方法和AUTO_INCREMENT屬性一起使用,當(dāng)往帶有‘AUTO_INCREMENT’屬性字段的表中新增記錄時,LAST_INSERT_ID()即返回該字段的值,大家可試下(我已經(jīng)驗證過);
二是帶有表達式:如上面介紹的LAST_INSERT_ID(value+1),它返回的是表達式的值,即‘value+1’;
以上是“如何使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!