2013-08-12 28 views
8

我正在使用MySQL。 我想檢索AUTO_INCREMENT列將會輸入的下一個值,而不輸入新記錄。在MySQL中查找AUTO_INCREMENT列的下一個值

create table ABC(id int(10) NOT NULL AUTO_INCREMENT,name char(10)); 

在oracle中我會用sequencename.nextval();但是我在MySQL中使用什麼?

這是我爲什麼不使用

select max(id) from ABC; 

假設我有一個ID = 2的條目。現在,列ID會將下一個值設爲3. 在創建ID = 3的記錄之前,如果我刪除ID = 2的記錄。 我提到的查詢的答案將是2.但我想要實際值3,auto_increment列無論如何將採取。

+0

都不是。我想獲得一個價值。但是這些答案打印了一個描述。不是可檢索的值 –

+0

http://www.microshell.com/database/mysql/emulating-nextval-function-to-get-sequence-in-mysql/ – Mihai

+0

使用此代碼:'SELECT(IFNULL(max(id), 0)+ 1)作爲表格中的id。 如果表中沒有記錄,那麼IFNULL將會很有幫助 –

回答

8

這樣的查詢表狀態:

SHOW TABLE STATUS WHERE `Name` = 'table_name' 

現在的結果,你會得到一個名爲Auto_increment列。這是你要求的價值。

在JAVA:

conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword); 
stmt = conn.createStatement(); 
rs = stmt.executeQuery("SHOW TABLE STATUS WHERE `Name` = 'table_name'"); 
rs.next(); 
String nextid = rs.getString("Auto_increment"); 

完整的示例在這裏:http://www.avajava.com/tutorials/lessons/how-do-i-use-jdbc-to-query-a-mysql-database.html

+0

是的,它提供了一個輸出。如何從顯示的狀態中檢索該值? 從(SHOW TABLE STATUS WHERE'Name' ='table_name')中選擇auto_increment不起作用 –

+0

但是用什麼語言? –

+0

使用JDBC的java。 我想僅接收ResultSet中的結果值。 –

0

沒有辦法保證你會插入行之前得到什麼價值。這主要是因爲你將不得不鎖定整個表格以保證其他線程不會用「你的」下一個值進行插入。

您可以通過啓動事務,插入行,獲取值然後執行回滾來保留值。然後,您可以安全地使用該值。

只要插入一行就會簡單多了,所以也許我不理解你在做什麼的目的。

+0

我想執行插入查詢到另一個表中,檢查它是否有效,然後才插入到這個表中。 –

+0

做到這一點的最佳方式是交易。如果你正在使用MyISAM,我能想到的最好的方式就是插入行,獲取自動增量值,<做其他事情>,如果失敗,則刪除行。 – Vatev

1

如果我理解正確的話,你可以使用的行數爲指標:

SELECT TABLE_ROWS+1 
FROM information_schema.tables 
WHERE table_name='tableName' 
AND table_schema = DATABASE(); 
相關問題