欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2011年08月14日 22:57:26   作者:  
MySQL數(shù)據(jù)表結構中,一般情況下,都會定義一個具有‘AUTO_INCREMENT’擴展屬性的‘ID’字段,以確保數(shù)據(jù)表的每一條記錄都可以用這個ID唯一確定
分表除了表名的索引不同之外,表結構都是一樣的,如果各表的‘ID'字段仍采用‘AUTO_INCREMENT'的方式的話,ID就不能唯確定一條記錄了。
這時就需要一種處于各個分表之外的機制來生成ID,我們一般采用一張單獨的數(shù)據(jù)表(不妨假設表名為‘ticket_mutex')來保存這個ID,無論哪個分表有數(shù)據(jù)增加時,都是先到ticket_mutex表把ID值加1,然后取得ID值。
這個取ID的操作看似很復雜,所幸的是,MySQL提供了LAST_INSERT_ID機制,讓我們能一步完成。
1、新建數(shù)據(jù)表ticket_mutex
復制代碼 代碼如下:

CREATE TABLE ticket_mutex (
name varchar(32) NOT NULL PRIMARY KEY COMMENT '業(yè)務名稱',
value bigint(20) UNSIGNED NOT NULL COMMENT 'ID值'
)Engine=InnoDB DEFAULT CHARSET=UTF8 COMMENT '保存分表ID表';

字段‘name'用來說明這個ID是哪個業(yè)務的,比如‘用戶'的ID,我們可以定為‘USER';
字段‘value'即該業(yè)務的ID值。
2、初始化業(yè)務和其ID值
復制代碼 代碼如下:

INSERT INTO ticket_mutex(name, value) values('USER', 0),('POST', 0);
+------+-------+
| name | value |
+------+-------+
| POST | 0 |
| USER | 0 |
+------+-------+

我們初始化了2條記錄,即有2個不同的業(yè)務,分別代表‘用戶信息'和‘主題信息',它們初始ID值均為‘0';
3、獲取分表唯一ID
這個時候就要利用MySQL提供的LAST_INSERT_ID()機制了。
在往用戶表里新增一條數(shù)據(jù)時,獲取‘用戶ID':
復制代碼 代碼如下:

UPDATE ticket_mutex SET value=LAST_INSERT_ID(value+1) WHERE name='USER';SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 1 |
+------------------+

通過這條語句之后,我們得到結果為1,這個值就是我們所需要的值。再來查看數(shù)據(jù)記錄,我們發(fā)現(xiàn)記錄總數(shù)沒有改變,但是‘用戶'的ID已經為1了;
復制代碼 代碼如下:

+------+-------+
| name | value |
+------+-------+
| POST | 0 |
| USER | 1 |
+------+-------+

查看所有的記錄:
復制代碼 代碼如下:

+------+-------+
| name | value |
+------+-------+
| POST | 1 |
| USER | 1 |
+------+-------+

從上可以看出,通過MySQL的LAST_INSERT_ID機制,我們可以保證在記錄總數(shù)不增長的情況下,讓業(yè)務ID在不斷的增加,從而保證了分表ID的唯一性。
4、LAST_INSERT_ID說明
從名字可以看出,LAST_INSERT_ID即為最后插入的ID值,根據(jù)MySQL的官方手冊說明,它有2種使用方法
一是不帶參數(shù):LAST_INSERT_ID(),這種方法和AUTO_INCREMENT屬性一起使用,當往帶有‘AUTO_INCREMENT'屬性字段的表中新增記錄時,LAST_INSERT_ID()即返回該字段的值,大家可試下(我已經驗證過);
二是帶有表達式:如上面介紹的LAST_INSERT_ID(value+1),它返回的是表達式的值,即‘value+1';

相關文章

  • mysql 誤刪除ibdata1之后的恢復方法

    mysql 誤刪除ibdata1之后的恢復方法

    如果誤刪除了在線服務器中mysql innodb相關的數(shù)據(jù)文件ibdata1以及日志文件 ib_logfile*,應該怎樣恢復呢
    2013-12-12
  • MySQL語句執(zhí)行順序和編寫順序實例解析

    MySQL語句執(zhí)行順序和編寫順序實例解析

    這篇文章主要介紹了MySQL語句執(zhí)行順序和編寫順序實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • MySQL核心參數(shù)優(yōu)化文件my.ini實現(xiàn)

    MySQL核心參數(shù)優(yōu)化文件my.ini實現(xiàn)

    本文主要介紹了MySQL核心參數(shù)優(yōu)化文件my.ini實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • mysql prompt的用法詳解

    mysql prompt的用法詳解

    本篇文章是對mysql中prompt的用法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Nacos配置MySQL8的方法

    Nacos配置MySQL8的方法

    這篇文章主要介紹了Nacos配置MySQL8的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Centos7安裝和配置Mysql5.7

    Centos7安裝和配置Mysql5.7

    網(wǎng)上關于Linux安裝mysql數(shù)據(jù)庫的教程數(shù)不勝數(shù),但是,大多教程都是漏洞百出。今天,為了幫助各位需要的人,從而寫下Centos7安裝配置mysql5.7的教程。
    2018-02-02
  • MySql閃退和服務無法啟動的解決方法

    MySql閃退和服務無法啟動的解決方法

    今天小編就為大家分享一篇關于MySql閃退和服務無法啟動的解決方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Ubuntu上mysql的安裝及使用(通用版)

    Ubuntu上mysql的安裝及使用(通用版)

    今天小編就為大家分享一篇關于Ubuntu上mysql的安裝及使用(通用版),小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL?數(shù)據(jù)類型及最優(yōu)選取規(guī)則

    MySQL?數(shù)據(jù)類型及最優(yōu)選取規(guī)則

    這篇文章主要介紹了MySQL?數(shù)據(jù)類型及最優(yōu)選取規(guī)則,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-08-08
  • MySQL中order by在子查詢中失效的問題解決方案

    MySQL中order by在子查詢中失效的問題解決方案

    這篇文章主要介紹了MySQL中order by在子查詢中失效的問題解決,文中補充介紹了Mysql 5.7版本導致的子查詢order by排序無效問題的探究,需要的朋友可以參考下
    2023-07-07

最新評論