国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值

2024-07-24 13:02:54
字體:
來源:轉載
供稿:網友
分表除了表名的索引不同之外,表結構都是一樣的,如果各表的‘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;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';
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 株洲市| 泉州市| 曲阜市| 斗六市| 宜丰县| 永吉县| 林州市| 陆良县| 哈密市| 崇左市| 门头沟区| 扬州市| 武义县| 修水县| 调兵山市| 长乐市| 容城县| 太白县| 云安县| 双城市| 黔西县| 嵊州市| 泸水县| 合肥市| 英山县| 香港| 彰化市| 江川县| 乐亭县| 保定市| 罗城| 新和县| 同心县| 米脂县| 义马市| 石柱| 固原市| 雷山县| 红原县| 临湘市| 栾川县|