MySQL

2013-08-12 13 views
8

'daki AUTO_INCREMENT sütununun sonraki değerini bulun MySQL kullanıyorum. AUTO_INCREMENT sütununun yeni bir kayıt girmeden alacağı bir sonraki değeri almak istiyorum.MySQL

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

ben sequencename.nextval(); kullanılmış olurdu Ama MySQL ne kullanacağız? Ben değil kullanım

select max(id) from ABC; 

varsayalım ben id = 2 ile bir girdi var mıydı nedeni işte

olduğunu. Şimdi sütun kimliği bir sonraki değeri 3 olarak alacak. Kimlik = 3 ile bir kayıt oluşturmadan önce, id = 2 ile kaydı silersem. Belirtilen sorgu için yanıt 2 olacaktır. Ancak, auto_increment sütununun alacağı gerçek değer 3'ü istiyorum. Böyle

+0

de. Bir değer almak istiyorum. Fakat bu cevaplar bir açıklama yazdı. Geri alınabilir değer değil –

+0

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

+0

BU KODU KULLANIN: SELECT (IFNULL (max (id), 0) + 1) tablodan id olarak. IFNULL, –

cevap

8

Sorgu masa durumu:

SHOW TABLE STATUS WHERE `Name` = 'table_name' 

Şimdi sonuçta sen Auto_increment adlı bir sütun alacak. Bu senin istediğin değer. JAVA yılında

: Burada

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

için tam bir örnek: http://www.avajava.com/tutorials/lessons/how-do-i-use-jdbc-to-query-a-mysql-database.html

+0

tablosunda kayıt olmaması durumunda yardımcı olacaktır. Evet, bir çıkış veriyor. Görüntülenen değerden bu değeri nasıl alabilirim? auto_increment 'i seçin (TABLO DURUMU NEREDE' Name' = 'table_name') –

+0

'dan işe yaramıyor Ama hangi dilde? JDBC kullanarak –

+0

java. Sadece ResultSet'te sonuç olarak değer almak istiyorum. –

0

Eğer satır eklemeden önce almak için gidiyoruz hangi değeri garanti etmenin bir yolu yoktur. Bunun nedeni, başka hiçbir iş parçacığının "sizin" sonraki değerinizle bir ekleme yapacağını garanti etmek için tüm masayı kilitlemeniz gerektiğidir.

Bir işlem başlatarak, satır ekleyerek, değeri alıp geri alma yaparak bir değer ayırabilirsiniz. O zaman bu değeri güvenle kullanabilirsiniz.

Satırı eklemek çok daha kolay olacak, belki de yaptığınız şeyin amacını anlayamıyorum. Doğru anladıysam,

+0

Başka bir tabloya ekleme sorgusu gerçekleştirmek istiyorum, geçerli olup olmadığını kontrol edin ve sadece bu tabloya ekleyin. –

+0

Bunu yapmanın en iyi yolu bir işlem olacaktır.Eğer MyISAM kullanıyorsanız en iyisi, satırı eklemek, satır silmek başarısız olursa, autoincrement değerini, olsun. – Vatev

1

, sen göstergesi olarak satır sayısını kullanabilirsiniz:

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