与获取最后插入的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. 如何在Scrapy中获取最后一个ID的MySQL?
- 2. 获取最后一个插入的ID
- 3. 获取元素的最后一个ID
- 4. 使用MySQL获取最后一个插入的ID
- 5. 如何从MySQL表中的第一个ID获取最大ID?
- 6. mysql删除最后一个字符
- 7. 如何获取从SQL表中删除的最后一行的ID
- 8. Jquery获取多个元素的删除类exept最后一个
- 9. 如何获取mysql中最后一行特定的id?
- 10. 获取最后一个插入ID
- 11. 获取最后一个ID值w/jQuery
- 12. SQL PHP获取最后一个ID
- 13. 获取最后一篇文章的用户ID(MySQL)
- 14. 在MySQL中获取自动增量的最后创建的ID
- 15. 删除后用最小的ID SQL
- 16. 如何获取MVC中最后一个插入的ID?
- 17. 如何获取CakePHP 3.0中的最后一个插入ID?
- 18. 从表中获取正确的最后一个ID
- 19. iPhone iOS:SQLite3无法获取表中的最后一个ID值
- 20. 如何在LINQ中获取最后一个插入的ID EF
- 21. 获取MySQL中每个月的最后一个记录....?
- 22. 获取最后一排的MYSQL
- 23. MySQL删除最后4个字母
- 24. 删除字符串中最后一个空格后的最后一个字符
- 25. 的multi_index_container删除最后一个元素
- 26. 删除整数的最后一个数
- 27. 删除NSString的最后一个字符
- 28. 如何在mysql中获取最后插入的2行perticular id?
- 29. 在MySql中获取最后生成的ID
- 30. 在MySQL中删除删除时的唯一ID
为什么你需要不再在数据库中的值?为了获得更准确的答案,这是一个基本问题。 – danihp 2011-12-22 09:39:49