最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于MySql的擴(kuò)展功能生成全局ID

 更新時間:2015年12月12日 11:00:05   作者:gallop_liu  
本文借用 MySQL的擴(kuò)展功能 REPLACE INTO 來生成全局id,REPLACE INTO和INSERT的功能一樣,但是當(dāng)使用REPLACE INTO插入新數(shù)據(jù)行時,如果新插入的行的主鍵或唯一鍵(UNIQUE Key)已有的行重復(fù)時,已有的行會先被刪除,然后再將新數(shù)據(jù)行插入

本文利用 MySQL的擴(kuò)展功能 REPLACE INTO 來生成全局id,REPLACE INTO和INSERT的功能一樣,但是當(dāng)使用REPLACE INTO插入新數(shù)據(jù)行時,如果新插入的行的主鍵或唯一鍵(UNIQUE Key)已有的行重復(fù)時,已有的行會先被刪除,然后再將新數(shù)據(jù)行插入(REPLACE INTO 是原始操作)。

建立類似下面的表:

CREATE TABLE `tickets64` ( 
  `id` bigint(20) unsigned NOT NULL auto_increment, 
  `stub` char(1) NOT NULL default '', 
  PRIMARY KEY (`id`), 
  UNIQUE KEY `stub` (`stub`) 
) ENGINE=MyISAM; 

當(dāng)需要獲得全局唯一ID時,執(zhí)行下面的SQL語句:

REPLACE INTO `tickets64` (`stub`) VALUES ('a'); 
SELECT LAST_INSERT_ID(); 

第一次執(zhí)行這個語句后,ticket64表將包含以下數(shù)據(jù):

+--------+------+ 
| id     | stub | 
+--------+------+ 
| 1      |    a | 
+--------+------+  

以后再次執(zhí)行前面的語句,stub字段值為'a'的行已經(jīng)存在,所以MySQL會先刪除這一行,再插入。因此,第二次執(zhí)行后,ticket64表還是只有一行數(shù)據(jù),只是id字段的值為2。這個表將一直只有一行數(shù)據(jù)。

更棒的方法:

      比如,只需要一張ticket表就可以為所有的業(yè)務(wù)表提供各自連續(xù)的ID。下面,來看一下我們的方法。首先來看一下表結(jié)構(gòu):

CREATE TABLE `sequence` ( 
  `name` varchar(50) NOT NULL, 
  `id` bigint(20) unsigned NOT NULL DEFAULT '0', 
  PRIMARY KEY (`name`) 
) ENGINE=InnoDB; 

 注意區(qū)別,id字段不是自增的,也不是主鍵。在使用前,我們需要先插入一些初始化數(shù)據(jù):

INSERT INTO `sequence` (`name`) VALUES  
('users'), ('photos'), ('albums'), ('comments'); 

接下來,我們可以通過執(zhí)行下面的SQL語句來獲得新的照片ID:

UPDATE `sequence` SET `id` = LAST_INSERT_ID(`id` + 1) WHERE `name` = 'photos'; 
SELECT LAST_INSERT_ID(); 

我們執(zhí)行了一個更新操作,將id字段增加1,并將增加后的值傳遞到LAST_INSERT_ID函數(shù),從而指定了LAST_INSERT_ID的返回值。

實際上,我們不一定需要預(yù)先指定序列的名字。如果我們現(xiàn)在需要一種新的序列,我們可以直接執(zhí)行下面的SQL語句:

INSERT INTO `sequence` (`name`) VALUES('new_business') ON DUPLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id` + 1); 
SELECT LAST_INSERT_ID();

     這里,我們采用了INSERT … ON DUPLICATE KEY UPDATE這個MySQL擴(kuò)展,這個擴(kuò)展的功能也和INSERT一樣插入一行新的記錄,但是當(dāng)新插入的行的主鍵或唯一鍵(UNIQUE Key)和已有的行重復(fù)時,會對已有行進(jìn)行UPDATE操作。

當(dāng)我們第一次執(zhí)行上面的語句時,因為還沒有name為'new_business'的字段,所以正常的執(zhí)行了插入操作,需要注意的是通過這種方式獲取的序列起始值為0,而不是1。因為第一次執(zhí)行時,沒有執(zhí)行UPDATE,所以也沒有為LAST_INSERT_ID傳遞值,我們也沒有自增字段,所以SELECT LAST_INSERT_ID()將返回0。不過這個應(yīng)該不是什么大問題。

UPDATE: 這個方法更容易解決單點問題,也不局限于兩個服務(wù)器,只要對不同的服務(wù)器設(shè)置不同的初始值(但必須是連續(xù)的),然后將增量變?yōu)榉?wù)器數(shù)就行了。

以上內(nèi)容是基于MySql的擴(kuò)展功能生成全局ID的相關(guān)資料,希望大家喜歡。

相關(guān)文章

  • centos6.5下mysql 5.7.19 安裝配置方法

    centos6.5下mysql 5.7.19 安裝配置方法

    這篇文章主要為大家詳細(xì)介紹了centos6.5下mysql 5.7.19 安裝配置方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Mysql 如何實現(xiàn)多張無關(guān)聯(lián)表查詢數(shù)據(jù)并分頁

    Mysql 如何實現(xiàn)多張無關(guān)聯(lián)表查詢數(shù)據(jù)并分頁

    這篇文章主要介紹了Mysql 實現(xiàn)多張無關(guān)聯(lián)表查詢數(shù)據(jù)并分頁的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MySQL服務(wù)維護(hù)筆記

    MySQL服務(wù)維護(hù)筆記

    MySQL服務(wù)維護(hù)筆記...
    2006-12-12
  • Mysql如何通過binlog日志恢復(fù)數(shù)據(jù)詳解

    Mysql如何通過binlog日志恢復(fù)數(shù)據(jù)詳解

    binlog日志用于記錄所有更新了數(shù)據(jù)或者已經(jīng)潛在更新了數(shù)據(jù)的所有語句,下面這篇文章主要給大家介紹了關(guān)于Mysql如何通過binlog日志恢復(fù)數(shù)據(jù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • MySQL免安裝版(zip)安裝配置詳細(xì)教程

    MySQL免安裝版(zip)安裝配置詳細(xì)教程

    這篇文章主要為大家詳細(xì)介紹了MySQL免安裝版(zip)安裝配置詳細(xì)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 超詳細(xì)MySQL8.0.22安裝及配置教程

    超詳細(xì)MySQL8.0.22安裝及配置教程

    這篇文章主要介紹了超詳細(xì)MySQL8.0.22安裝及配置教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳細(xì)聊一聊mysql的樹形結(jié)構(gòu)存儲以及查詢

    詳細(xì)聊一聊mysql的樹形結(jié)構(gòu)存儲以及查詢

    由于mysql是關(guān)系型數(shù)據(jù)庫,因此對于類似組織架構(gòu),子任務(wù)等相關(guān)的樹形結(jié)構(gòu)的處理不是很友好,下面這篇文章主要給大家介紹了關(guān)于mysql樹形結(jié)構(gòu)存儲以及查詢的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • MySQL之mysqldump的使用詳解

    MySQL之mysqldump的使用詳解

    這篇文章主要介紹了MySQL之mysqldump的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • MySQL分區(qū)之LIST分區(qū)詳解

    MySQL分區(qū)之LIST分區(qū)詳解

    mysql分區(qū)之LIST分區(qū)講解?MySQL中的LIST分區(qū)在很多方面類似于RANGE分區(qū),下面這篇文章主要給大家介紹了關(guān)于MySQL分區(qū)之LIST分區(qū)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 如何解決MySQL安裝遇到Start service紅叉問題

    如何解決MySQL安裝遇到Start service紅叉問題

    在安裝MySQL時,若遇到StartService步驟打紅叉無法繼續(xù),可通過計算機(jī)管理以管理員身份運行服務(wù),找到MySQL服務(wù),更改為本地系統(tǒng)賬戶登錄,解決安裝問題,此方法為實際操作經(jīng)驗,可供參考,確保安裝順利完成
    2024-10-10

最新評論

体育| 星子县| 班戈县| 承德县| 澜沧| 中卫市| 闸北区| 百色市| 铁力市| 内黄县| 肃南| 突泉县| 万山特区| 刚察县| 方城县| 九寨沟县| 沙洋县| 阿坝| 伊春市| 桓台县| 林周县| 华宁县| 开平市| 秭归县| 久治县| 武隆县| 广丰县| 东乌| 乐安县| 乌兰察布市| 阿坝县| 阿拉善左旗| 东平县| 巩义市| 化德县| 永安市| 炎陵县| 宜兴市| 滕州市| 南昌市| 九台市|