與獲取最後插入的id類似,是否有一個很好的機制在mysql被刪除後獲取最後刪除的ID?獲取mysql中的最後一個刪除的ID
11
A
回答
9
通過「ID」,我假設你的意思是「自動增量」?
由於您可以隨時刪除任何任意行(或行集):不,無法告訴您最近刪除的行(或多行)。
您可以,但是,創建一個「觸發器」來保存此信息對您:
3
而是創建觸發器,你需要在你刪除使用這個每一次
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
1
這取決於您如何進行刪除操作。但是,如果你有一個整數id列,您可以使用下面的技巧:
DELETE FROM users
WHERE login = 'newtover' AND user_id = LAST_INSERT_ID(user_id);
SELECT LAST_INSERT_ID();
但是你要確保MySQL的短路前一條件,不優化運行user_id = LAST_INSERT_ID(user_id)
第一。也就是說,您可以將查詢調整爲如下形式:
DELETE FROM users
WHERE login = 'newtover' AND IFNULL(user_id, 0) = LAST_INSERT_ID(user_id);
P.S.我不問你爲什麼需要這個。最可能的是,你不應該希望它=)
0
如果你碰巧打電話從JDBC MySQL數據庫,那麼你就可以執行SELECT
並呼籲ResultSet.deleteRow()
你通過讀取結果和搶的ID。
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();
}
}
}
例表
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');
0
與LAST_INSERT_ID的黑客已經提到,但這個答案 錯過,它可以聚合的事實!
最後一個插入ID有固定的大小,但對於小鍵可以使用。
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. 獲取where /和子句列中的最後一個id mysql/sql
- 2. 如何在Scrapy中獲取最後一個ID的MySQL?
- 3. 獲取元素的最後一個ID
- 4. 獲取最後一個插入的ID
- 5. php mysql獲取最後一個插入行的ID給出錯
- 6. 使用MySQL獲取最後一個插入的ID
- 7. 如何從MySQL表中的第一個ID獲取最大ID?
- 8. 如何獲取從SQL表中刪除的最後一行的ID
- 9. mysql刪除最後一個字符
- 10. Jquery獲取多個元素的刪除類exept最後一個
- 11. 如何獲取mysql中最後一行特定的id?
- 12. MySQL - INNER JOIN - 只取第二個表中的最後一個ID
- 13. 如何在MySQL中獲取最後4個插入的ID
- 14. 獲取最後一個ID值w/jQuery
- 15. 獲取最後一個ID PDO
- 16. SQL PHP獲取最後一個ID
- 17. 獲取最後一個插入ID
- 18. 刪除按鈕正在刪除Mysql中的最後一個插入的行
- 19. 如何在java中獲取最後插入的ID mysql mysql
- 20. 如何使用MySQL獲取最後一個ID插入
- 21. 獲取mrc的telerik菜單中的最後一個id
- 22. 刪除最後一個字
- 23. 在vb.net獲取最後一次更新行mysql的ID
- 24. 獲取最後一篇文章的用戶ID(MySQL)
- 25. 在MySQL中獲取自動增量的最後創建的ID
- 26. 從MySQL的非AUTO_INCREMENT列中獲取最後插入的ID
- 27. 刪除後用最小的ID SQL
- 28. 如何獲取SQL中創建的最後一個ID
- 29. 如何在LINQ中獲取最後一個插入的ID EF
- 30. 如何獲取CakePHP 3.0中的最後一個插入ID?
爲什麼你需要不再在數據庫中的值?爲了獲得更準確的答案,這是一個基本問題。 – danihp 2011-12-22 09:39:49