Podobny do uzyskania ostatnio wstawionego identyfikatora, czy istnieje miły mechanizm w mysql, aby uzyskać ostatni usunięty identyfikator po usunięciu wiersza?Pobierz ostatni usunięty identyfikator w mysql
Odpowiedz
Przez "ID" zakładam, że masz na myśli "auto-inkrement"?
Ponieważ możesz usunąć dowolny dowolny wiersz (lub zestaw wierszy) w dowolnym czasie: nie, nie ma możliwości określenia WHAT wiersza (lub wierszy), który został ostatnio usunięty.
Ty może jednak stworzyć „spust”, aby zapisać te informacje dla Ciebie:
Zamiast tworzyć spust, trzeba korzystać z tego za każdym razem, gdy zostanie usunięty
declare @table1 table(id int identity,name varchar(50))
insert into @table1 (name) values('abc')
insert into @table1 (name) values('xyz')
insert into @table1 (name) values('pqr')
insert into @table1 (name) values('wqe')
delete from @table1 output deleted.name,deleted.id where id=3
To zależy od sposobu usuwania. Ale jeśli masz całkowitą kolumny id, można użyć następującego Hack:
DELETE FROM users
WHERE login = 'newtover' AND user_id = LAST_INSERT_ID(user_id);
SELECT LAST_INSERT_ID();
ale należy upewnić się, że zwarć MySQL dawnego stanu i nie optymalizuje uruchamianie user_id = LAST_INSERT_ID(user_id)
pierwszy. To można dostosować zapytanie do czegoś takiego:
DELETE FROM users
WHERE login = 'newtover' AND IFNULL(user_id, 0) = LAST_INSERT_ID(user_id);
P.S. Nie pytam, dlaczego możesz tego potrzebować. Najprawdopodobniej nie powinien chcieć go =)
Jeśli zdarzy ci się być wywołanie bazy danych MySQL z JDBC, a następnie można wykonać SELECT
i nazywają ResultSet.deleteRow()
jak można przeczytać na podstawie wyników i chwycić identyfikatora.
import java.sql.*;
public class Delete {
public static void main(String... args) throws SQLException {
try(Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=john&password=denver");
PreparedStatement statement = conn.prepareStatement("select id from some_table where event=?")
) {
statement.setString(1, "test");
try(ResultSet result = statement.executeQuery()) {
System.out.println("deleting id " + result.getLong("id"));
result.deleteRow();
}
conn.commit();
}
}
}
Przykład tabeli
create table some_table(
id bigint(12),
event varchar(100)
);
insert into some_table values(1, 'test');
insert into some_table values(2, 'test');
insert into some_table values(3, 'test');
insert into some_table values(4, 'other');
Hack z LAST_INSERT_ID już wspomniano, ale odpowiedź strzela fakt, że może to agregacji!
ostatni identyfikator wkładki ma ustalony rozmiar, ale w przypadku małych klawiszy można go użyć.
mysql> insert into t1() values(),(),(),(),(),(),();
Query OK, 7 row affected (0.00 sec)
mysql> select * from t1;
+---+
| n |
+---+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+---+
7 rows in set (0.00 sec)
select last_insert_id(0); -- clear accumulator
+-------------------+
| last_insert_id(0) |
+-------------------+
| 0 |
+-------------------+
1 row in set (0.00 sec)
-- keys will be separated by zeroes
mysql> delete from t1
where last_insert_id(last_insert_id()
* pow(10, 2 + floor(log(n)/log(10))) + n)
limit 6;
Query OK, 6 rows affected (0.00 sec)
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 10203040506 |
+------------------+
1 row in set (0.00 sec)
-- rows deleted
mysql> select * from t1 limit 1;
+---+
| n |
+---+
| 7 |
+---+
1 row in set (0.00 sec)
- 1. Pobierz ostatni wpis w tabeli MySQL
- 2. PHP Postgres: Pobierz ostatni identyfikator Wstaw
- 3. WP8/C#/SQLite: pobierz ostatni wstawiony identyfikator?
- 4. Wybierz ostatni identyfikator wkładki
- 5. Pobierz ostatnio wstawiony identyfikator z Mysql
- 6. Pobierz ostatni identyfikator wstawki z Oracle 11g, używając JDBC
- 7. Pobierz ostatni element w SortedDictionary
- 8. Powrót Ostatni identyfikator (IDENTYFIKACJA) Włącz Wstaw wiersz VB.NET MySQL
- 9. Pobierz ostatnio wstawiony identyfikator automatycznej inkrementacji w mysql
- 10. PDO otrzyma ostatni wstawiony identyfikator
- 11. Ciąg MySQL Ostatni indeks
- 12. Pobierz ostatni element w tablicy listy
- 13. Pobierz ostatni czas modyfikacji pliku w Linuksie
- 14. Pobierz ostatni element z CompositeView w marionetce
- 15. Pobierz ostatni element tablicy ciągów w vb6?
- 16. Pobierz ostatni zaktualizowany plik w HDFS
- 17. Uzyskaj ostatni identyfikator na wstawionego wiersza w Oracle DB
- 18. pobierz ostatnio wstawiony identyfikator z wordpress $ wpdb
- 19. Uzyskaj ostatni identyfikator wstawki z doktryną 2?
- 20. Kalendarz Androida, pobierz identyfikator wydarzenia
- 21. MySQL: inkrementujący identyfikator w DB
- 22. Identyfikator transakcji w wyzwalaczu MySQL
- 23. Kalendarz - Pobierz ostatni dzień poprzedniego miesiąca
- 24. Pobierz identyfikator wybranego wiersza w tabeli -HTML
- 25. Kernel Linuksa - Pobierz ostatni blok pamięci pisemnej
- 26. Zend Framework pobierz ostatni identyfikator wstawki wielowierszowej wstawki za pomocą wykonaj
- 27. Pobierz ostatnią wstawioną formę przechowywaną formularza identyfikacyjnego w MySQL
- 28. Jak uzyskać ostatni wstawiony identyfikator w modelu adresu klienta Magento
- 29. Pobierz ostatni argument wiersza poleceń w pliku wsadowym Windows
- 30. Ruby Rails: pobierz identyfikator pola wprowadzania formularza
Dlaczego potrzebujesz wartości, których nie ma w bazie danych? Aby uzyskać dokładniejszą odpowiedź, jest to bardzo ważna kwestia. – danihp