Soru Herhangi bir tablo için geçerli AUTO_INCREMENT değerini alın


MySQL'de bir tablo için geçerli AUTO_INCREMENT değerini nasıl alabilirim?


218
2018-04-04 20:55


Menşei


Bu soru mutlaka bir kopya değil. Bağlantılı soru satır sayısını soruyor ve kabul edilen yanıt SADECE satır sayısı alıyor, AUTO_INCREMENT DEĞİLDİR - ki bu tamamen farklı bir sorudur. - methai


Cevaplar:


Bu sorguyu kullanarak tüm tablo verilerini alabilirsiniz:

SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;

Bu bilgiyi kullanarak bu bilgiyi tam olarak alabilirsiniz:

SELECT `AUTO_INCREMENT`
FROM  INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND   TABLE_NAME   = 'TableName';

440
2018-04-04 20:56



Vay, hızlı aydınlatma! Teşekkürler!! +2 puan - bparise
Ayrıca kullanabilir DATABASE() açık veritabanı adı yerine. - Mido
Not: KULLANIMI vermediyseniz, DATABASE () NULL VERİTABANI komuta - methai
Yapamayacağın bir sebep var mı SELECT MAX(id) FROM table_name? - Brian
Son kaydı sildiyseniz ne olur? max size geçerli auto_increment vermez - peterpeterson


MySQL'i aradığına inanıyorum. LAST_INSERT_ID () işlevi. Komut satırında, aşağıdakileri çalıştırın:

LAST_INSERT_ID();

Bu değeri bir SELECT sorgusu aracılığıyla da elde edebilirsiniz:

SELECT LAST_INSERT_ID();

19
2018-04-04 21:03



Bir tane eklemek ve beklemek en iyi fikir değil, sonraki satırın kimliği olacaktır. Bu arada başka bir işlem yeni bir satır ekleyebilir ve yanlış kimliği doğru kullanırdınız? - agim
Haklısın. İçinde bulunduğunuz ortama bağlı olduğunu düşünüyorum. Kontrollü bir test ortamıysa, büyük olasılıkla bir tane ekleyebilir ve güvende olabilirsiniz. En iyi cevap methai tarafından sağlandı. - jvdub
En iyi cevap, neye ulaşmak istediğinize bağlıdır. Yeni bir satır eklerseniz ve oluşturulan kimliği bilmek istiyorsanız, cevabınız LAST_INSERT_ID () işleminin güvenli olduğundan ve oluşturulmuş nesnenin kimliğini aldığından, cevabınız en iyi yanıttır. Cevabına oy verdim ama parçayı 'ona bir tane ekle' ile sildim ... - agim
LAST_INSERT_ID () bağlantı başına. Yani, başka bir işlem sizden üç ek satır eklerse, LAST_INSERT_ID () SENİN aramanız onlarınkinden farklı olacaktır. Bu soru, masadaki geçerli AUTO_INC değerini soruyor. - methai
Son INSERT ifadesi birden fazla satır eklediyse, bu size yanlış bir yanıt verecektir. MySQL belgeleri (vurgu eklenmiştir): "LAST_INSERT_ID (), temsil eden bir 64 bit değeri döndürür ilk Otomatik olarak oluşturulan değer, en son yürütülen INSERT ifadesinin bir sonucu olarak AUTO_INCREMENT sütununa başarıyla eklendi. "Sezgisel! dev.mysql.com/doc/refman/5.6/en/... - Charlie


Numarayı öğrenmek istiyorsanız, bir sorguda almak yerine, şunları kullanabilirsiniz:

SHOW CREATE TABLE tablename;

Altta auto_increment görmelisiniz


12
2018-01-16 09:33



Bu, tablonuzun satırları yoksa ve auto_increment ise, işe yaramaz. 1. - Pacerier


Rağmen methaiSorguyu el ile çalıştırırsanız, yanıtı doğru olur, sorun 2 eşzamanlı işlem / bağlantı aslında bu sorguyu üretim zamanında yürütür (örneğin).

Sadece eşzamanlı olarak açılan 2 bağlantı ile MySQL çalışma tezgahında manuel olarak denendi:

CREATE TABLE translation (
  id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:

İşlem 1:

21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
     WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';

insert into translation (id) values (21);

İşlem 2:

21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
     WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';

insert into translation (id) values (21);

# commit transaction 1;
# commit transaction 2;

İşlem 1'in eklenmesi tamam: İşlem 2'nin takılması hatayla gider: Hata Kodu: 1062. 'PRIMARY' anahtarı için '21' girişini tekrarlayın.

İyi bir çözüm olurdu jvdubcevabı, işlem / bağlantı başına 2 eki olacaktır:

İşlem 1:

insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();

İşlem 2:

insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();

# commit transaction 1;
# commit transaction 2;

Ama biz last_insert_id () insertin hemen ardından! Ve bu kimliği yabancı bir anahtarın beklendiği diğer tablolara yerleştirmek için yeniden kullanabiliriz!

Ayrıca, 2 sorguyu aşağıdaki gibi çalıştıramayız:

insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
    information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
    AND TABLE_NAME='translation'));

çünkü biz aslında bu kimliği başka bir masadan almayı / geri almayı ya da geri dönmek istiyoruz!


4
2017-08-20 21:31



İyi açıklama! Teşekkürler. Şimdi neden kullanmak isteyeceğimiz belli oluyor last_insert_id() - Imtiaz


mysqli yürütülebilir örnek kod:

<?php
        $db = new mysqli("localhost", "user", "password", "YourDatabaseName");
        if ($db->connect_errno) die ($db->connect_error);

        $table=$db->prepare("SHOW TABLE STATUS FROM YourDatabaseName");
        $table->execute();
        $sonuc = $table->get_result();
            while ($satir=$sonuc->fetch_assoc()){
                if ($satir["Name"]== "YourTableName"){
                    $ai[$satir["Name"]]=$satir["Auto_increment"];
                }
            }
        $LastAutoIncrement=$ai["YourTableName"];
        echo $LastAutoIncrement;
    ?>  

3
2018-05-05 14:38





Sütun sql sunucusunda autoincremented sonra geçerli autoincremented değeri görmek için ve bu sütun için bu değeri düzenlemek istiyorsanız, aşağıdaki sorguyu kullanın.

-- to get current value
select ident_current('Table_Name')

-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")


1
2017-08-02 08:28