91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數據庫 > 
  • 如何使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值

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

發布時間:2021-11-12 10:51:45 來源:億速云 閱讀:220 作者:小新 欄目:數據庫

小編給大家分享一下如何使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

MySQL數據表結構中,一般情況下,都會定義一個具有‘AUTO_INCREMENT’擴展屬性的‘ID’字段,以確保數據表的每一條記錄都可以用這個ID唯一確定;


隨著數據的不斷擴張,為了提高查詢性能,降低查詢熱點,一般都會把一張表按照一定的規則分成多張數據表,即常說的分表;

分表除了表名的索引不同之外,表結構都是一樣的,如果各表的‘ID’字段仍采用‘AUTO_INCREMENT’的方式的話,ID就不能唯確定一條記錄了。

這時就需要一種處于各個分表之外的機制來生成ID,我們一般采用一張單獨的數據表(不妨假設表名為‘ticket_mutex’)來保存這個ID,無論哪個分表有數據增加時,都是先到ticket_mutex表把ID值加1,然后取得ID值。

這個取ID的操作看似很復雜,所幸的是,MySQL提供了LAST_INSERT_ID機制,讓我們能一步完成。

1、新建數據表ticket_mutex

view sourceprint?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值

view sourceprint?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’:

view sourceprint?UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name=USER;SELECT LAST_INSERT_ID(); 

+------------------+ 

| LAST_INSERT_ID() | 

+------------------+ 

|                1 | 

+------------------+

通過這條語句之后,我們得到結果為1,這個值就是我們所需要的值。再來查看數據記錄,我們發現記錄總數沒有改變,但是‘用戶’的ID已經為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機制,我們可以保證在記錄總數不增長的情況下,讓業務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’;

以上是“如何使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌苏市| 兴安县| 阿巴嘎旗| 瑞安市| 宁化县| 和林格尔县| 滦南县| 若尔盖县| 高密市| 竹山县| 蓝田县| 福安市| 甘孜县| 洪洞县| 宁远县| 桃园县| 固阳县| 长泰县| 项城市| 郁南县| 巫山县| 江达县| 左贡县| 昌吉市| 河东区| 新闻| 商南县| 子长县| 丘北县| 富顺县| 南平市| 鹿泉市| 井研县| 永新县| 温泉县| 柘城县| 青浦区| 安岳县| 准格尔旗| 万山特区| 桐柏县|