我們時常使用序列(sequence)來處理主鍵字段,在mysql中是沒有序列的,但是mysql有提供了自增長(increment)來實現類似的目的。
差異:
(1)首先mysql本身不提供序列機制。
(2)mysql的auto_increment只能實現自增,且步長是1。而sequence可以實現設定步長、開始索引、是否迴圈等。.
(3)mysql乙個表只能有乙個自增長字段。自增長只能被分配給固定表的固定的某一欄位,不能被多個表共用。並且只能是數字型。
(4)在歷史表和資料遷移時,經常會遇到自增主鍵重複的問題。
場景
在下列情況下可能你需要使用序列:
(1)業務複雜,你需要高度定製和控制主鍵(自增主鍵只能是按數字遞增的,但是序列可以隨心所欲的變化,比如按照年月日生成主鍵)
(2)你希望手工維護自增長,方便資料遷移;
(3)當事務跨多表時,期望事務可靠性;
然而,序列也有缺點,主要就是程式處理麻煩,不如自增方便。oracle的自增有快取,不用擔心效率問題。
mysql本身是實現不了的,但我們可以用建立乙個序列表,使用函式來獲取序列的值。(而mysql只能通過觸發器模擬,可能會有效能損失。 )
1.首先建立一張序列表
drop
table
ifexists sequence;
create
table sequence(
merchant_id varchar(50) not
null,
merchant_id varchar(50) not
null,
current_val int(5) default
0, incrent_val int(5) default
1,primary
key(merchant_id));
2.新增兩個序列
insert
into sequence values ('11','test11',0,1);
insert
into sequence values ('1','test1',0,1);
3.建立獲取當前值函式
create function currval(v_merchant_id varchar(50))
returns integer
begin
declare i integer;
set i = 0;
select current_val into i from sequence where merchant_id = v_merchant_id;
return i;
end;
4.建立獲取、生成下乙個值函式
create function nextval (v_merchant_id varchar(50))
returns integer
begin
update sequence set current_val = current_val + incrent_val where merchant_id = v_merchant_id;
return currval(v_merchant_id);
end;
5.建立觸發器。實現在插入資料時,根據merchant_id不同,插入不同的序列值
create
trigger
`merchant_sequence`
before
insert
on`nl_loaninfo`
foreach
rowbegin
set new.crt_tst_no = nextval(new.merchant_id);
end;
6.向nl_loaninfo插入資料
insert
into nl_loaninfo(merchant_id) values ('11');
insert
into nl_loaninfo(merchant_id) values ('11');
insert
into nl_loaninfo(merchant_id) values ('11');
insert
into nl_loaninfo(merchant_id) values ('1');
insert
into nl_loaninfo(merchant_id) values ('1');
select * from nl_loaninfo;
7.select crt_tst_no,merchant_id from nl_loaninfo顯示
1 11
2 11
3 11
1 1
2 1
iOS常用小功能
這些功能比較實用,而且實現的 也比較簡單 此方式打完 不會返回應用介面,而是停留在打 介面 nsurl url nsurl urlwithstring tel 10086 此方法撥號之前會提示是否撥號,打完 後會回到應用介面,但是因為是私有api,蘋果不建議使用 nsurl url nsurl ur...
JS實用小功能
獲取使用者ip ua 城市 操作cookie function getcookie c name return unescape document.cookie.substring c start,c end return function setcookie c name,value,expire...
Guava小功能收集
自定義過濾條件的集合 listnumbers lists.newarraylist 1,2,3,6,10,34,57,89 predicateaccepteven new predicate listevennumbers lists.newarraylist collections2.filter...