99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

mysql怎么獲取序列名 mysql序列號(hào)生成

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)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元廣水做網(wǎng)站,已為上家服務(wù),為廣水各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

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

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

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

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

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

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);

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

注意語法,數(shù)據(jù)庫字段要對(duì)應(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)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(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中如何對(duì)MySQL進(jìn)行操作詳解將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫中的幾種方法MySQL存儲(chǔ)文本和圖片的方法Ubuntu上mysql的安裝及使用(通用版)nodejs同步調(diào)用獲取mysql數(shù)據(jù)時(shí)遇到的大坑

如何使用mysql 一次查詢多個(gè)序列

只能再查詢自增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會(huì)改變。

怎樣獲取MySQL自增長的最大序列號(hào)

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

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

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

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

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

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

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

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

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

當(dāng)前名稱:mysql怎么獲取序列名 mysql序列號(hào)生成
轉(zhuǎn)載來源:http://www.yijiale78.com/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化