日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:21日期: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 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品腿扒开做爽爽爽挤奶网站| 国产精品99久久久久久董美香| 国产精品xxx在线观看| 亚洲人成毛片在线播放女女| 午夜在线播放视频欧美| 免费久久99精品国产自在现线| 中文一区一区三区免费在线观 | 国产精品久久久久久久免费观看 | 国产日韩欧美中文在线| 国产欧美另类| 国产精品专区免费| 成人久久久久| 国产精品av久久久久久麻豆网| 亚洲国产成人精品女人| 日韩午夜在线| 亚州国产精品| 老司机免费视频一区二区| 日韩欧美综合| 三级欧美在线一区| 国产三级精品三级在线观看国产| 久久av一区二区三区| 亚洲精品在线国产| 精品三级久久久| 欧美日韩少妇| 久久超级碰碰| 欧美黄色网页| 一级欧美视频| 久久精品国产一区二区| 999久久久91| 青草综合视频| 日韩在线中文| 日韩三级久久| 日韩高清成人| 一区二区国产在线| 久久精品亚洲一区二区| 九九九精品视频| 美女久久一区| 97精品在线| 日本麻豆一区二区三区视频| 成人国产精选| 欧美亚洲人成在线| 久久精品高清| 国产乱子精品一区二区在线观看 | 老司机精品久久| 亚洲精选久久| 荡女精品导航| 蜜桃视频一区二区三区在线观看| 香蕉久久久久久| 在线人成日本视频| 日本不卡视频在线| 激情综合激情| 97人人精品| 国产免费av一区二区三区| 伊人久久大香线蕉av超碰演员| 麻豆久久一区二区| 日本不卡一二三区黄网| 激情婷婷久久| 国产精品久久久久蜜臀| 国产亚洲一卡2卡3卡4卡新区| 亚洲在线成人| 深夜福利视频一区二区| 国产免费播放一区二区| 欧美一级精品| 日本蜜桃在线观看视频| 国产精久久久| 日韩区一区二| 国产一区二区精品| 日韩在线不卡| 高清日韩中文字幕| 久久精品三级| 你懂的网址国产 欧美| 日本a口亚洲| 亚洲精品欧美| 亚洲资源网站| 亚洲欧洲av| 一本综合精品| 中文字幕av一区二区三区四区| 亚洲网站视频| 国产综合亚洲精品一区二| 成人日韩av| 91日韩在线| 国产videos久久| 久久久久久久欧美精品| 亚洲精品韩国| 黄色av日韩| 欧美不卡高清| 国产午夜精品一区二区三区欧美| 亚洲女同一区| 视频一区免费在线观看| 蜜臀久久久99精品久久久久久| 日韩午夜av| 亚洲免费中文| 视频一区二区不卡| 美女精品一区| 在线看片日韩| 日韩三区四区| 国产精品一区二区中文字幕| 国产精品xxx在线观看| 麻豆国产91在线播放| 亚洲一区二区日韩| 亚洲精品三级| 国产精品毛片久久久| 国产精品17p| 国产精品成人a在线观看| 97人人精品| 在线一区视频观看| 免费污视频在线一区| 亚洲成人免费| 久久亚洲风情| 亚洲精品自拍| 久久国产三级精品| 国产精品欧美一区二区三区不卡| 欧美1区二区| 国产精品13p| 国产精品毛片久久| 精品一区在线| 亚洲精品三级| 久久精品一区二区国产| 日韩成人三级| 女人天堂亚洲aⅴ在线观看| 蜜臀av国产精品久久久久 | 久久wwww| 中文字幕色婷婷在线视频| 久久婷婷亚洲| 免播放器亚洲一区| 国产日韩免费| 久久不见久久见中文字幕免费| 天堂av在线| 黄色av日韩| 少妇精品在线| 美女视频一区在线观看| 99视频精品视频高清免费| 丝袜a∨在线一区二区三区不卡| 天堂av一区| 福利一区二区免费视频| 亚洲在线免费| 麻豆精品av| 免费成人网www| 午夜性色一区二区三区免费视频| 国产极品模特精品一二| 欧美日韩色图| 久久99伊人| 国产精品17p| 九九精品调教| 日韩国产欧美三级| 高清在线一区| 99国产精品私拍| 国产亚洲电影| 欧美日韩视频| 精品99在线| 9色精品在线| 精品女同一区二区三区在线观看| 在线午夜精品| 精品国产一区二区三区性色av| 亚洲一级黄色| 欧美国产专区| 国产精品美女| 亚洲国产成人二区| 日韩高清一区| 女人天堂亚洲aⅴ在线观看| 精品三级在线观看视频| 免费黄网站欧美| 成人羞羞视频在线看网址| 91精品国产自产观看在线| 不卡在线一区二区| 超碰在线99| 欧美天堂在线| 蜜臀va亚洲va欧美va天堂| 成人日韩在线观看| 国产精品调教视频| 中文一区一区三区免费在线观| 成人欧美一区二区三区的电影| 一区二区精彩视频| 国产精品乱战久久久| 偷拍欧美精品| 日韩欧美午夜| 美女久久久久久| 日韩精品福利一区二区三区| 国产一区清纯| 欧美精选视频一区二区| 精品久久久久中文字幕小说| 日本午夜精品一区二区三区电影 | 国产精品蜜月aⅴ在线| 老牛影视一区二区三区| 亚洲四虎影院| 久久99国产精品视频| 欧美日韩亚洲一区二区三区在线 | 日韩有吗在线观看| 亚洲欧美日韩视频二区| 午夜久久免费观看| 久久九九精品| 伊人久久视频| 欧美国产一级| 精品日本视频| 精品伊人久久| 亚洲精品一级| 中文无码久久精品| 亚洲青青久久| 日本va欧美va瓶| 欧美日韩91|