Tương tự như nhận id được chèn lần cuối, có cơ chế tốt nào trong mysql để lấy ID đã xóa sau cùng sau khi một hàng đã bị xóa không?Nhận id bị xóa cuối cùng trong mysql
Trả lời
Bằng "ID", tôi giả sử bạn có nghĩa là "tự động tăng"?
Vì bạn có thể xóa bất kỳ hàng tùy ý nào (hoặc tập hợp các hàng) bất cứ lúc nào: không, không có cách nào cho biết WHICH hàng (hoặc hàng) bạn đã xóa gần đây nhất.
Bạn thể Tuy nhiên, tạo ra một "cò" để lưu thông tin này cho bạn:
Thay vì tạo ra một kích hoạt, bạn cần phải sử dụng này mỗi và mỗi khi bạn xóa
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
Tùy thuộc vào cách bạn xóa. Nhưng nếu bạn có một cột số nguyên id, bạn có thể sử dụng hack như sau:
DELETE FROM users
WHERE login = 'newtover' AND user_id = LAST_INSERT_ID(user_id);
SELECT LAST_INSERT_ID();
Nhưng bạn nên chắc chắn rằng MySQL ngắn mạch với điều kiện cũ và không tối ưu hóa để chạy user_id = LAST_INSERT_ID(user_id)
đầu tiên. Đó là bạn có thể điều chỉnh truy vấn cho một cái gì đó như:
DELETE FROM users
WHERE login = 'newtover' AND IFNULL(user_id, 0) = LAST_INSERT_ID(user_id);
P.S. Tôi không hỏi tại sao bạn có thể cần điều này. Có thể, bạn không nên muốn nó =)
Nếu bạn tình cờ gọi cơ sở dữ liệu MySQL của mình từ JDBC, bạn có thể thực hiện SELECT
và gọi ResultSet.deleteRow()
khi đọc qua kết quả và lấy 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();
}
}
}
Ví dụ bảng
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');
Các hack với last_insert_id đã được đề cập, nhưng câu trả lời mà nhớ thực tế là nó có thể tổng hợp!
id chèn cuối cùng có kích thước cố định nhưng đối với các khóa nhỏ, nó có thể được sử dụng.
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. PHP Postgres: Nhận ID chèn cuối cùng
- 2. Nhận id được chèn cuối cùng Tiếp theo
- 3. PLSQL JDBC: Cách nhận ID hàng cuối cùng?
- 4. Django - id chèn cuối cùng
- 5. Lệnh cuối cùng trong cùng thiết bị đầu cuối
- 6. Xóa đối tượng cuối cùng trong NSMutablearray
- 7. MySQL: Cách nhận các thay đổi của UPDATE cuối cùng
- 8. Xóa dòng trống cuối cùng
- 9. xóa thư mục cuối cùng trong URL
- 10. Jquery Nhận hàng cuối cùng của bảng trong yếu tố cuối cùng trong một loạt
- 11. MySQL - cho mỗi ID trong danh sách chọn 2 yếu tố cuối cùng
- 12. Java xóa chuỗi cuối cùng
- 13. Tìm mục nhập cuối cùng trong bảng MySQL
- 14. SELECT id cuối cùng, không có INSERT
- 15. Xóa lịch sử thiết bị đầu cuối trong Linux
- 16. R xóa từ cuối cùng khỏi chuỗi
- 17. MSSQL: Chỉ mục cuối cùng trong GROUP BY (với id)
- 18. MYSQL Chọn từ bảng, nhận mới nhất/10 hàng cuối cùng trong bảng
- 19. làm cách nào tôi có thể nhận id cuối cùng được chèn vào trong formview
- 20. Nhận lỗi Javascript cuối cùng
- 21. Dừng MySQL Sử dụng lại ID AUTO_INCREMENT
- 22. Làm thế nào tôi có thể rollback lệnh xóa cuối cùng của tôi trong mysql?
- 23. mysql chọn từ n hàng cuối cùng
- 24. Xóa ký tự cuối cùng của edittext
- 25. MultiSet xóa yếu tố cuối cùng
- 26. Bắt phiên bản cuối cùng của một thư mục bị xóa trong subversion
- 27. MYSQL chọn 3 hàng cuối cùng, theo thứ tự ASC
- 28. Xóa ký tự cuối cùng của chuỗi
- 29. Xóa dòng cuối cùng khỏi chuỗi
- 30. Xóa N byte cuối cùng khỏi tệp
Tại sao bạn cần giá trị không còn trong cơ sở dữ liệu? Để có câu trả lời chính xác hơn, đây là một vấn đề quan trọng. – danihp