久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何使用MySQL的LAST

139次閱讀
沒有評論

共計 2204 個字符,預計需要花費 6 分鐘才能閱讀完成。

行業資訊    
數據庫    
如何使用 MySQL 的 LAST_INSERT_ID 來確定各分表的唯一 ID 值

丸趣 TV 小編給大家分享一下如何使用 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 值”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-20發表,共計2204字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 炉霍县| 平果县| 梓潼县| 博白县| 永靖县| 澄迈县| 闸北区| 平谷区| 乌鲁木齐市| 台山市| 滕州市| 清苑县| 大方县| 永和县| 资中县| 板桥市| 新兴县| 南京市| 乐亭县| 河源市| 合川市| 拜城县| 汾西县| 铅山县| 池州市| 芦溪县| 明光市| 饶平县| 秭归县| 岳阳县| 曲沃县| 申扎县| 资中县| 桐城市| 清涧县| 平南县| 大石桥市| 唐海县| 宜城市| 历史| 汕尾市|