小功能 mysql定義序列

2021-08-17 21:28:49 字數 2529 閱讀 2640

我們時常使用序列(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...