欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql怎么獲取序列名 mysql序列號生成

MySQL實(shí)現(xiàn)類似Oracle序列的方案

MySQL實(shí)現(xiàn)類似Oracle的序列

成都創(chuàng)新互聯(lián)2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元廣水做網(wǎng)站,已為上家服務(wù),為廣水各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

Oracle一般使用序列(Sequence)來處理主鍵字段,而MySQL則提供了自增長(increment)來實(shí)現(xiàn)類似的目的;

但在實(shí)際使用過程中發(fā)現(xiàn),MySQL的自增長有諸多的弊端:不能控制步長、開始索引、是否循環(huán)等;若需要遷移數(shù)據(jù)庫,則對于主鍵這塊,也是個頭大的問題。

本文記錄了一個模擬Oracle序列的方案,重點(diǎn)是想法,代碼其次。

Oracle序列的使用,無非是使用.nextval和.currval偽列,基本想法是:

1、MySQL中新建表,用于存儲序列名稱和值;

2、創(chuàng)建函數(shù),用于獲取序列表中的值;

具體如下:

表結(jié)構(gòu)為:

drop

table

if

exists

sequence;

create

table

sequence

(

seq_name

VARCHAR(50)

NOT

NULL,

--

序列名稱

current_val

INT

NOT

NULL,

--當(dāng)前值

increment_val

INT

NOT

NULL

DEFAULT

1,

--步長(跨度)

PRIMARY

KEY

(seq_name)

);

實(shí)現(xiàn)currval的模擬方案

create

function

currval(v_seq_name

VARCHAR(50))

returns

integer

begin

declare

value

integer;

set

value

=

0;

select

current_value

into

value

from

sequence

where

seq_name

=

v_seq_name;

return

value;

end;

函數(shù)使用為:select

currval('MovieSeq');

實(shí)現(xiàn)nextval的模擬方案

create

function

nextval

(v_seq_name

VARCHAR(50))

return

integer

begin

update

sequence

set

current_val

=

current_val

+

increment_val

where

seq_name

=

v_seq_name;

return

currval(v_seq_name);

end;

函數(shù)使用為:select

nextval('MovieSeq');

增加設(shè)置值的函數(shù)

create

function

setval(v_seq_name

VARCHAR(50),

v_new_val

INTEGER)

returns

integer

begin

update

sequence

set

current_val

=

v_new_val

where

seq_name

=

v_seq_name;

return

currval(seq_name);

同理,可以增加對步長操作的函數(shù),在此不再敘述。

注意語法,數(shù)據(jù)庫字段要對應(yīng)上

use

bvboms;

DELIMITER

$$

create

function

setval(v_seq_name

VARCHAR(50),

v_new_val

INTEGER)

returns

integer

begin

update

sequence

set

current_val

=

v_new_val

where

seq_name

=

v_seq_name;

return

currval(seq_name);

end

$$

DELIMITER

$$

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:mysql實(shí)現(xiàn)sequence功能的代碼Can''t

connect

to

local

MySQL

through

socket

''/tmp/mysql.sock''解決方法Mysql常用函數(shù)大全(分類匯總講解)利用MySQL主從配置實(shí)現(xiàn)讀寫分離減輕數(shù)據(jù)庫壓力mysql+spring+mybatis實(shí)現(xiàn)數(shù)據(jù)庫讀寫分離的代碼配置Golang中如何對MySQL進(jìn)行操作詳解將圖片儲存在MySQL數(shù)據(jù)庫中的幾種方法MySQL存儲文本和圖片的方法Ubuntu上mysql的安裝及使用(通用版)nodejs同步調(diào)用獲取mysql數(shù)據(jù)時遇到的大坑

如何使用mysql 一次查詢多個序列

只能再查詢自增ID即可

具體操作:MYSQL獲取自增ID的四種方法

select max(id) from tablename

SELECT LAST_INSERT_ID() 函數(shù)

LAST_INSERT_ID 是與table無關(guān)的,如果向表a插入數(shù)據(jù)后,再向表b插入數(shù)據(jù),LAST_INSERT_ID會改變。

怎樣獲取MySQL自增長的最大序列號

用SELECT LAST_INSERT_ID() 取得,但是需要保證LAST_INSERT_ID和插入操作在同一個session

mycat1.6-RELEASE連接mysql8.0.26全局序列id數(shù)據(jù)庫方式如何獲取到?

在MySQL中,使用auto_increment類型的id字段作為表的主鍵,并用它作為其他表的外鍵,形成“主從表結(jié)構(gòu)”,這是數(shù)據(jù)庫設(shè)計中常見的用法。但是在具體生成id的時候,我們的操作順序一般是:先在主表中插入記錄,然后獲得自動生成的id,以它為基礎(chǔ)插入從表的記錄。這里面有個困難,就是插入主表記錄后,如何獲得它對應(yīng)的id。通常的做法,是通過“select max(id) from tablename”的做法,但是顯然這種做法需要考慮并發(fā)的情況,需要在事務(wù)中對主表加以“X鎖“,待獲得max(id)的值以后,再解鎖。這種做法需要的步驟比較多,有些麻煩,而且并發(fā)性也不好。有沒有更簡單的做法呢?答案之一是通過select LAST_INSERT_ID()這個操作。乍一看,它和select max(id)很象,但實(shí)際上它是線程安全的。也就是說它是具體于數(shù)據(jù)庫連接的。下面通過實(shí)驗(yàn)說明:

1、在連接1中向A表插入一條記錄,A表包含一個auto_increment類型的字段。

2、在連接2中向A表再插入一條記錄。

3、結(jié)果:在連接1中執(zhí)行select LAST_INSERT_ID()得到的結(jié)果和連接2中執(zhí)行select LAST_INSERT_ID()的結(jié)果是不同的;而在兩個連接中執(zhí)行select max(id)的結(jié)果是相同的。

其實(shí)在MSSQL中SCOPE_IDENTITY()和IDENT_CURRENT()的區(qū)別和這里是類似的。使用SCOPE_IDENTITY()可以獲得插入某個IDENTITY字段的當(dāng)前會話的值,而使用IDENT_CURRENT()會獲得在某個IDENTITY字段上插入的最大值,而不區(qū)分不同的會話。

注:使用select last_insert_id()時要注意,當(dāng)一次插入多條記錄時,只是獲得第一次插入的id值,務(wù)必注意!可以試試

insert into tb(c1,c2) values (c1value,c2value),(c1value1,c2value2)..。

當(dāng)前名稱:mysql怎么獲取序列名 mysql序列號生成
轉(zhuǎn)載來源:http://www.chinadenli.net/article24/dooehje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站搜索引擎優(yōu)化網(wǎng)站營銷靜態(tài)網(wǎng)站網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化