激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Mysql - 使用MySQL的LAST_INSERT_ID來確定各分表的唯一ID值

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

2019-11-23 18:53MYSQL教程網(wǎng) Mysql

MySQL數(shù)據(jù)表結(jié)構(gòu)中,一般情況下,都會定義一個具有‘AUTO_INCREMENT’擴展屬性的‘ID’字段,以確保數(shù)據(jù)表的每一條記錄都可以用這個ID唯一確定

分表除了表名的索引不同之外,表結(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 

復(fù)制代碼代碼如下:


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值 

復(fù)制代碼代碼如下:


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': 

復(fù)制代碼代碼如下:


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了; 

復(fù)制代碼代碼如下:


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


查看所有的記錄: 

復(fù)制代碼代碼如下:


+------+-------+ 
| 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)驗證過); 
二是帶有表達(dá)式:如上面介紹的LAST_INSERT_ID(value+1),它返回的是表達(dá)式的值,即‘value+1';

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美成人免费看 | 91高清免费在线观看 | 伊人yinren22综合网色 | 国产精品成人一区二区三区电影毛片 | 色999国产| 午夜男人免费视频 | 成人午夜一区二区 | 在线成人一区二区 | 中文字幕在线观看电影 | 国人精品视频在线观看 | 蜜桃传免费看片www 日本一区二区三区视频在线 | 亚洲网站在线 | 99久久精品免费看国产小宝寻花 | 大奶一级片 | 美国一级黄色毛片 | 成人午夜网址 | 成年人网站视频免费 | 久久精品污 | 一区二区三区视频在线观看 | www.7777在线 | 在线91视频 | 亚洲精品午夜电影 | 精品中文字幕久久久久四十五十骆 | 亚洲欧洲日产v特级毛片 | 欧美视频国产 | 99久久自偷自偷国产精品不卡 | h色网站免费观看 | 男女无套免费视频 | 成人在线视频在线观看 | 午夜久久视频 | 成年免费观看视频 | 日本aaaa片毛片免费观看视频 | 一本精品999爽爽久久久 | 久久久久久久亚洲精品 | 成年免费在线视频 | 国产一级一片免费播放 | 久久人人av | 欧美大逼网 | 嫩草影院在线观看网站成人 | 一级做a爰片性色毛片2021 | 激情亚洲一区二区三区 |