數據庫 ID 生成方案:數據庫自增

創建一個數據庫實例,在這個實例中新建一個單獨的表:

表結構如下:

CREATE DATABASE `Test`;

CREATE TABLE Test.test01 (
    id bigint(20) unsigned NOT NULL auto_increment, 
    phone char(11) NOT NULL default '',
    PRIMARY KEY (id),
    UNIQUE KEY uni_phone (phone)
) ENGINE=Innodb;

可以使用下面的語句生成並獲取到一個自增ID

begin;
replace into test01(phone) VALUES ('12300008888');
select last_insert_id();
commit;

phone 的存在是爲了方便插入數據,當插入數據成功時,就產生了自增 id,而對於插入,這裏使用的是 replace,replace 會先查找是否存在 phone 指定值一樣的數據;如果存在,則先 delete 再 insert,如果不存在,則直接 insert。

這種主鍵 ID 的機制,需要單獨的數據庫實例,雖然可行,但是基於性能和可靠性來考慮,並不友好,業務系統每次獲取主鍵 ID,都需要請求數據庫,性能較低,甚至如果數據庫實例 down 機了,就會影響所有的業務系統。

爲解決數據庫可靠性的問題,後面再介紹分佈式 ID 的生成方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章