資料庫常常使用自增主鍵。通常會遇到這些問題:當我們在匯入舊資料時常常會發生主鍵重複衝突;資料庫主鍵沒有任何業務意義;常常會出現插入資料前需要獲取資料主鍵的情況,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...