資料庫主鍵ID管理方案

2021-10-08 02:49:52 字數 1312 閱讀 3348

資料庫常常使用自增主鍵。通常會遇到這些問題:當我們在匯入舊資料時常常會發生主鍵重複衝突;資料庫主鍵沒有任何業務意義;常常會出現插入資料前需要獲取資料主鍵的情況,mysql下讓人頭大。

生產過程中,常常用一張表以及函式來幫助維護業務表的主鍵。表用來存放業務表序列,函式用來處理並獲取業務表序列。當有業務資料插入時,先通過函式獲取該錶的序列,此時可以通過此序列加上一些業務元素,即生成了有業務意義且唯一的主鍵。

表主要兩個字段,表名和當前序列號

create

table

`t_ads_sequence`

(`seq_name`

varchar(50

)not

null

,`current_val`

int(11)

notnull

,primary

key(

`seq_name`))

engine

=innodb

default

charset

=utf8 comment

='序列統計表'

;

函式一:用來獲取當前序列

begin

declare

value

integer

;set

value=0

;select current_val into

value

from t_ads_sequence where seq_name = seq_nm;

return

value

;end

begin

declare

value

int;

setvalue

= currval(seq_nm);if

value

<

999999999

then

update t_ads_sequence set current_val = current_val +

1where seq_name = seq_nm;

else

update t_ads_sequence set current_val =

0where seq_name = seq_nm;

endif

;return currval(seq_nm)

;end

select nextval(

'base_info'

);

資料庫主鍵方案

1 堅決不可以用某個業務字段做主鍵,理由就不說了,業務都是有意義的,你能保證它產生的規則不變嗎?2 如果要彙總兩個庫表,id很多重複,那為什麼要把a表的資料匯入到b表,為什麼程式不能自己到2個表中去查詢呢,再說了,資料大了還要拆表呢 3 guid作為主鍵,mysql本身並沒有這個資料型別,oracl...

邏輯資料庫設計 需要ID 談主鍵Id

本文的目標就是要確認那些使用了主鍵,卻混淆了主鍵的本質而造成的一種反模式。每個了解資料庫設計的人都知道,主鍵對於一張表來說是乙個很重要,甚至必需的部分。這確實是事實,主鍵是好的資料庫設計的一部分。主鍵是資料庫確保資料行在整張表唯一性的保障。它是定位到一條記錄並且確保不會重複儲存的邏輯機制。主鍵也同時...

資料庫 ID 生成方案 Redis

使用 redis 來生成分布式 id,其實和利用 mysql 自增 id 類似,可以利用 redis 中的 incr 命令來實現原子性的自增與返回,比如 127.0.0.1 6379 set id 1 初始化自增 id 為1 ok127.0.0.1 6379 incr id 增加1,並返回 inte...