常見的幾個數據庫insert into操做的主鍵返回值

http://blog.csdn.net/axman/article/details/887918java

當插入一條記錄時,咱們不少時候都想馬當前插入的主鍵返回出來.做爲另外一個操做的條件.若是主鍵是
自動生成的(大多數時候是這樣),那麼取回主鍵是一種比較困難的事.可能對於一些特殊的數據庫必須把
insert into和select max(key)或什麼序列當前值做爲一個事務的原子來操做,但不少數據庫(以及數據庫操做環境)
並不能爲你提供事務併發控制.因此若是多人同時操做,那麼select max(key)極可能就不是你剛纔insert的
那條記錄.
 
在JDBC3.0中,已經能夠直接返回insert 語句的主KEY和其它值,但目前只有mysql支持.oracl和sqlserver
的JDBC都不支持這個特性.並且若是離開JAVA平臺就沒有這個特性了.
 
詳細讀了oacle,sqlserver,mysql的文檔,對上面三種數據庫找到了如下解決方案,在java和非java平臺都適用:
 
SQLServer:
 
INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
 
這一句至關於執行查詢操做,從結果集中getXXX(aliasName);就能夠獲取.
 
Oracle:
 
INSERT INTO tableName (fieldList ...) values (valueList ...) RETURNING [primaryKey INTO]:aliasName;
 
同上的方法能夠獲取.這兩種方法都是數據庫支持的sql語句,原以根本不存在併發衝突.
 
 
mysql:
沒有找到能夠絕對保證原子性的語句(誰知道反饋一下)
 
若是是在JAVA平臺,能夠直接利用 Statement的返回鍵特性.比較安全,在非java平臺上,目前只能經過在同一會話中用
LAST_INSERT_ID([columnName])來獲取,注意必定要在同一會話中. mysql

相關文章
相關標籤/搜索