創建一個數據庫實例,在這個實例中新建一個單獨的表:
表結構如下:
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 的生成方案。