成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

詳解mysql插入數據后返回自增ID的七種方法

瀏覽:3日期:2023-10-07 12:27:14
引言

mysql 和 oracle 插入的時候有一個很大的區別是:

oracle 支持序列做 id; mysql 本身有一個列可以做自增長字段。

mysql 在插入一條數據后,如何能獲得到這個自增 id 的值呢?

一:使用 last_insert_id()

SELECT LAST_INSERT_ID();

1. 每次 mysql 的 query 操作在 mysql 服務器上可以理解為一次“原子”操作, 寫操作常常需要鎖表, 這里的鎖表是 mysql 應用服務器鎖表不是我們的應用程序鎖表。

2. 因為 LAST_INSERT_ID 是基于 Connection 的,只要每個線程都使用獨立的 Connection 對象,LAST_INSERT_ID 函數 將返回該 Connection 對 AUTO_INCREMENT列 最新的 insert or update* 作生成的第一個 record 的ID。這個值不能被其它客戶端(Connection)影響,保證了你能夠找回自己的 ID 而不用擔心其它客戶端的活動,而且不需要加鎖。使用單INSERT 語句插入多條記錄, LAST_INSERT_ID 返回一個列表。 3. LAST_INSERT_ID 是與 table 無關的,如果向表 a 插入數據后,再向表 b 插入數據,LAST_INSERT_ID 會改變。

二:使用 max(id)

如果不是頻繁的插入我們也可以使用這種方法來獲取返回的id值

select max(id) from user;

這個方法的缺點是不適合高并發。如果同時插入的時候返回的值可能不準確。

三:創建一個存儲過程

在存儲過程中調用先插入再獲取最大值的操作。

DELIMITER $$DROP PROCEDURE IF EXISTS `test` $$CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(in name varchar(100),out oid int)BEGIN insert into user(loginname) values(name); select max(id) from user into oid; select oid;END $$DELIMITER ;call test(’gg’,@id);四:使用 @@identity

select @@IDENTITY

@@identity 是表示的是最近一次向具有 identity 屬性(即自增列)的表插入數據時對應的自增列的值,是系統定 義的全局變量。一般系統定義的全局變量都是以@@開頭,用戶自定義變量以@開頭。比如有個表 A,它的自增列是 id,當向 A 表插入一行數據后,如果插入數據 后自增列的值自動增加至 101,則通過select @@identity得到的值就是 101。使用@@identity的前提是在進行 insert 操作后,執行 select @@identity 的時候連接沒有關閉,否則得到的將是 NULL 值。

五:是使用 getGeneratedKeys()

Connection conn = ;Serializable ret = null;PreparedStatement state = .;ResultSet rs=null;try { state.executeUpdate(); rs = state.getGeneratedKeys(); if (rs.next()) { ret = (Serializable) rs.getObject(1); } } catch (SQLException e) {}return ret;

總結:在 mysql 中做完插入之后獲取 id 在高并發的時候是很容易出錯的。另外 last_insert_id 雖然是基于 session 的但是不知道為什么沒有測試成功。

六:selectkey:

其實在 ibtias 框架里使用 selectkey 這個節點,并設置 insert 返回值的類型為 integer,就可以返回這個 id 值。

SelectKey 在Mybatis中是為了解決 Insert 數據時不支持主鍵自動生成的問題,他可以很隨意的設置生成主鍵的方式。

不管 SelectKey 有多好,盡量不要遇到這種情況吧,畢竟很麻煩。

詳解mysql插入數據后返回自增ID的七種方法

SelectKey 需要注意 order 屬性:

Mysql 一類支持自動增長類型的數據庫中,order 需要設置為 after 才會取到正確的值。 Oracle 這樣取序列的情況,需要設置為 before,否則會報錯。

xml 的例子:

<insert parameterType='map'> insert into table1 (name) values (#{name}) <selectKey resultType='java.lang.Integer' keyProperty='id'> SELECT LAST_INSERT_ID() AS id </selectKey> </insert>

上面 xml 的傳入參數是 map,selectKey 會將結果放到入參數 map 中。用 POJO 的情況一樣,但是有一點需要注意的是,keyProperty 對應的字段在 POJO 中必須有相應的 setter 方法,setter 的參數類型還要一致,否則會報錯。

注解的形式:

@Insert('insert into table2 (name) values(#{name})') @SelectKey(statement='call identity()', keyProperty='nameId', before=false, resultType=int.class) int insertTable2(Name name); 方法七:使用<insert 中的useGeneratedKeys 和 keyProperty 兩個屬性

1.在Mybatis Mapper文件中添加屬性 “useGeneratedKeys”和“keyProperty”,其中 keyProperty 是 Java 對象的屬性名,而不是表格的字段名。

<insert parameterType='Spares' useGeneratedKeys='true' keyProperty='id'> insert into system(name) values(#{name}) </insert>

2.Mybatis 執行完插入語句后,自動將自增長值賦值給對象 systemBean 的屬性id。因此,可通過 systemBean 對應的 getter 方法獲取!

int count = systemService.insert(systemBean); int id = systemBean.getId(); //獲取到的即為新插入記錄的ID

【注意事項】

1.Mybatis Mapper 文件中,“useGeneratedKeys” 和 “keyProperty” 必須添加,而且 keyProperty 一定得和 java 對象的屬性名稱一直,而不是表格的字段名。

2. java Dao中的 Insert 方法,傳遞的參數必須為 java 對象,也就是 Bean,而不能是某個參數。

到此這篇關于詳解mysql插入數據后返回自增ID的七種方法的文章就介紹到這了,更多相關mysql插入返回自增ID內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美精品丝袜中出| 国产视频亚洲| 91久久国产自产拍夜夜嗨| 日韩精品一区在线观看| 久久精品噜噜噜成人88aⅴ| 午夜在线一区二区| 亚洲一区二区三区四区的 | a4yy欧美一区二区三区| 欧美日韩大陆一区二区| 日本中文在线一区| 久久国产福利| 性做久久久久久免费观看欧美| 亚洲乱码视频| 亚洲天堂2016| 国产精品国产三级国产专区53| 久久久久九九视频| 99久久99久久久精品齐齐 | 樱桃视频在线观看一区| 亚洲国产国产亚洲一二三 | 日本欧美一区二区三区乱码| 久久国产精品99国产| 亚洲国产精品视频| 国产一区二区你懂的| 亚洲欧洲综合另类在线| 在线日韩av永久免费观看| 18涩涩午夜精品.www| 伊人久久综合| 亚洲精选视频在线| 一本一本久久a久久精品综合妖精| 亚洲靠逼com| 亚洲欧美清纯在线制服| 图片区小说区国产精品视频| 久久中文精品| 毛片一区二区三区| 欧美日韩免费观看一区二区三区| 久久精品999| 欧美人与禽zozo性伦| 国产呦萝稀缺另类资源| 欧美日韩国产一区二区三区地区| 久久99国产精品久久99果冻传媒| 精品污污网站免费看| 国产在线精品免费| 欧美日韩国产综合一区二区三区| 国模一区二区三区白浆| 精品女同一区二区| 欧美日韩在线播放一区二区| 国产精品久久久久久久岛一牛影视| 一区在线播放| 一区二区高清在线| 久热re这里精品视频在线6| 日韩国产在线观看一区| 欧美日韩在线一区二区| 高清不卡一区二区在线| 亚洲精品一区二区在线观看| 欧美日本韩国在线| 一区二区在线观看免费视频播放| 久久久精品国产一区二区三区| 久久99热国产| 久久综合久久久久88| 国内精品嫩模av私拍在线观看| 一区二区三区在线视频免费 | 一区二区在线观看不卡| 亚洲女人av| 久久国产人妖系列| 精品精品国产高清a毛片牛牛| 亚洲欧美一区在线| 亚洲伊人伊色伊影伊综合网| 91国产丝袜在线播放| 成人免费黄色大片| 一区在线中文字幕| 久久亚洲影院| 成人一区二区三区中文字幕| 国产精品萝li| 色综合久久久久久久久久久| 高清国产午夜精品久久久久久| 国产精品国产三级国产普通话99 | 亚洲色图欧洲色图| 色女孩综合影院| 国产精品一二三在| 国产精品美女久久久久久久网站| 午夜一级在线看亚洲| 精品一区二区三区在线观看| 久久―日本道色综合久久| 亚洲高清电影| 久久国产人妖系列| 久久久久久久久久久电影| 国产欧美短视频| 国产一区二区三区观看| 国产欧美久久久精品影院| 一本综合精品| 国产精品一区二区男女羞羞无遮挡| 国产精品美女久久久久高潮 | 91精品国产美女浴室洗澡无遮挡| 欧美日韩一区二区三区在线观看免| 亚洲国产精品久久人人爱蜜臀| 欧美一级精品在线| 一区二区视频欧美| 美女爽到高潮91| 国产喷白浆一区二区三区| 色嗨嗨av一区二区三区| 99国产精品99久久久久久| 亚洲国产乱码最新视频| 欧美sm极限捆绑bd| 亚洲一区三区在线观看| 成人一区二区在线观看| 亚洲福中文字幕伊人影院| 欧美成人官网二区| 国产精品视频| 91免费精品国自产拍在线不卡| 日韩激情视频在线观看| 国产精品蜜臀在线观看| 欧美无砖专区一中文字| 欧美三级特黄| 久久精品国产精品亚洲红杏| 国产欧美日本一区视频| 在线国产亚洲欧美| 欧美日韩精品| 国产乱码精品一区二区三区av| 亚洲欧美日韩小说| 日韩精品中午字幕| 久久在线精品| 欧美色综合网| 国产精一区二区三区| 一区二区三国产精华液| 精品国产91九色蝌蚪| 色系网站成人免费| 欧美日韩国产欧| 激情另类小说区图片区视频区| 亚洲激情av在线| 久久久精品黄色| 欧美无砖专区一中文字| 亚洲一区欧美激情| 色综合久久综合网97色综合 | 九九精品一区二区| 亚洲另类春色校园小说| 久久久久久久久蜜桃| 欧美日韩一区视频| 亚洲欧美视频一区二区三区| 好看的日韩av电影| 成人免费黄色大片| 极品少妇一区二区三区精品视频| 亚洲视频在线一区观看| 精品国产亚洲一区二区三区在线观看| 久久久久久久久久久久久久一区| 91亚洲国产成人精品一区二区三| 久久99国产精品久久99果冻传媒| 亚洲国产精品久久艾草纯爱| 国产精品久久久久久福利一牛影视 | 亚洲成人自拍网| 亚洲国产精品t66y| 精品国产凹凸成av人导航| 欧美日韩视频在线第一区| 国产精品资源| 亚洲经典三级| 午夜精品影院| 99久久精品久久久久久清纯| 国产精品主播直播| 另类小说欧美激情| 亚洲va韩国va欧美va精品| 亚洲欧洲日本在线| 国产视频一区在线观看| 日韩天堂在线观看| 欧美精品久久99久久在免费线 | 久久久久久夜精品精品免费| 欧美一级欧美三级在线观看 | 91福利区一区二区三区| 国产精品外国| 亚洲高清在线观看一区| 国产精品二区影院| 欧美日韩国产综合视频在线| 色综合天天综合在线视频| 99re6这里只有精品视频在线观看| 国产成人综合视频| 经典三级视频一区| 久草精品在线观看| 九九九久久久精品| 老鸭窝一区二区久久精品| 香蕉久久一区二区不卡无毒影院| 亚洲同性同志一二三专区| 国产精品色眯眯| 国产欧美日韩精品a在线观看| 2022国产精品视频| 欧美精品一区二区三区四区| 精品久久久久久最新网址| 日韩精品一区二区三区在线观看 | 日韩精品一区在线| 日韩一级黄色大片| 日韩精品在线看片z| 精品国产3级a| 国产日韩v精品一区二区| 国产日韩精品一区二区浪潮av| 久久精品免视看| 中文字幕第一区综合| 中文字幕的久久| 亚洲视频每日更新| 一区二区三区成人| 天天综合网天天综合色| 日本成人在线网站| 精品一区二区三区免费毛片爱 | 日韩午夜在线|