Jak uzyskać bieżącą wartość AUTO_INCREMENT dla tabeli w MySQL?Uzyskaj bieżącą wartość AUTO_INCREMENT dla dowolnej tabeli
Odpowiedz
można uzyskać wszystkie dane tabeli przy użyciu tej kwerendy:
SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;
można uzyskać dokładnie te informacje za pomocą tej kwerendy:
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
wierzę szukasz MySQL LAST_INSERT_ID() funkcja. Jeśli w wierszu poleceń, wystarczy uruchomić następujące:
LAST_INSERT_ID();
Można również uzyskać tę wartość przez SELECT zapytania:
SELECT LAST_INSERT_ID();
To nie jest najlepszy pomysł, aby go dodać i oczekiwać, będzie to identyfikator następnego rzędu. W międzyczasie inna transakcja mogła wstawić nowy wiersz, a Ty użyłbyś niewłaściwego ID? – agim
Masz rację. Sądzę, że zależy to od środowiska, w którym się znajdujesz. Jeśli jest to kontrolowane środowisko testowe, najprawdopodobniej możesz je dodać i być bezpieczne. Najlepsza odpowiedź została dostarczona przez Metai. – jvdub
Jaka jest najlepsza odpowiedź, zależy od tego, co chcesz osiągnąć. Jeśli wstawisz nowy wiersz i chcesz poznać utworzony identyfikator, twoja odpowiedź jest najlepszą odpowiedzią, ponieważ LAST_INSERT_ID() jest bezpieczna dla transakcji i zapewnia, że otrzymasz identyfikator dla utworzonego obiektu. Głosowałem za twoją odpowiedzą, ale chciałbym usunąć tę część za pomocą "dodaj do niej ..." – agim
Jeśli tylko chcesz znać liczbę, niż dostać go w zapytanie następnie można użyć:
SHOW CREATE TABLE tablename;
Powinieneś zobaczyć AUTO_INCREMENT na dole
To nie działa, jeśli tabela nie ma wierszy, a auto_increment ma wartość '1'. – Pacerier
mysqli wykonywalny kod przykładowy:
<?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;
?>
Jeśli kolumna jest autoincremented w serwerze sql wtedy zobaczyć aktualną wartość autoincremented, a jeśli chcesz zmienić tę wartość dla danej kolumny użyć następującego zapytania.
-- to get current value
select ident_current('Table_Name')
-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")
Pomimo methai „s odpowiedź jest poprawna, jeśli ręcznie uruchomić kwerendę, problem pojawia się, gdy 2 jednoczesnych transakcji/połączenia faktycznie wykonać tej kwerendy w czasie wykonywania w produkcji (na przykład).
prostu próbowałem ręcznie w warsztacie MySQL z 2 połączenia równoczesnego otwarcia:
CREATE TABLE translation (
id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:
Transakcji 1:
21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
transakcja 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;
Insert o f transakcja 1 jest ok: Wstawienie transakcji 2 jest błędne: Kod błędu: 1062. Zduplikowany wpis "21" dla klucza "PODSTAWOWY".
Dobrym rozwiązaniem byłoby jvdub „s odpowiedź bo za transakcję/połączenia na 2 wkładki będą:
transakcja 1:
insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();
transakcja 2:
insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();
# commit transaction 1;
# commit transaction 2;
Ale mamy t o wykonaj last_insert_id() tuż po wstawieniu! Możemy ponownie użyć tego identyfikatora do wstawienia do innych tabel, w których oczekuje się klucza obcego!
Również nie możemy wykonać 2 zapytań w następujący sposób:
insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
AND TABLE_NAME='translation'));
bo rzeczywiście jesteśmy zainteresowani, aby chwycić/ponowne użycie tego identyfikatora w innej tabeli lub powrócić!
Dobre wyjaśnienie! dzięki. Teraz jasne jest, dlaczego chcemy użyć 'last_insert_id()' – Imtiaz
- 1. Uzyskaj bieżącą wartość ustawienia w Vim
- 2. Uzyskaj bieżącą wartość Animated.Value, React-native
- 3. Uzyskaj listę metod klas dla dowolnej klasy
- 4. Uzyskaj bieżącą wartość obiektu Subject.asObservable() wewnątrz usługi Angular Service
- 5. Uzyskaj wartość pipeline dla GitHub?
- 6. Znajdź następną wartość kolumny AUTO_INCREMENT w MySQL
- 7. Jak wyświetlić wartość auto_increment na stole
- 8. Uzyskaj następną wartość LocalDateTime dla danego dnia tygodnia
- 9. Jak pobrać bieżącą wartość enablecfoutputlyly?
- 10. Uri.TryCreate zwraca wartość true dla dowolnej wartości ciągu?
- 11. Kliknij wiersz tabeli i uzyskaj wartość wszystkich komórek
- 12. (1) blisko "AUTO_INCREMENT": błąd składni podczas zmieniania tabeli
- 13. Błąd NPM dla dowolnej komendy
- 14. Jak AUTO_INCREMENT w db2?
- 15. Uzyskaj wartość argumentu z TextTransform.exe do szablonu
- 16. Mecz warunkowo na bieżącą wartość węzeł
- 17. vim coraz bieżącą wartość vim foldmarker
- 18. Szyny migracji ustawić bieżącą datę jako wartość domyślną
- 19. Uzyskaj wartość Span Text
- 20. Uzyskaj zdalną wartość rejestru
- 21. Uzyskaj wartość klucza rejestru
- 22. JQuery - Uzyskaj wybraną wartość
- 23. Uzyskaj wartość edytora Monaco
- 24. Kątomierz Uzyskaj wartość modelu
- 25. Uzyskaj wartość zwracaną fputcsv
- 26. Uzyskaj wartość pozycji przewijania
- 27. JavaScript Uzyskaj wartość elementu
- 28. XCUIElement - Uzyskaj wartość obrazu
- 29. Uzyskaj wartość niestandardowego atrybutu
- 30. Uzyskaj wartość z qlineedit
To pytanie nie jest koniecznie duplikatem. Powiązane pytanie dotyczy liczby wierszy, a zaakceptowana odpowiedź TYLKO pobiera liczbę wierszy, a NIE AUTO_INCREMENT - co jest zupełnie innym pytaniem. – methai