Tôi có một số thử nghiệm chạy trên cơ sở dữ liệu MySQL được tải sẵn với các lược đồ và dữ liệu ví dụ từ một tập hợp các tệp SQL. Một số các thử nghiệm này, trong quá trình chạy của chúng, cũng tạo ra dữ liệu mới trong cơ sở dữ liệu.Làm thế nào để tìm các thay đổi trong một bảng liên quan đến một trận đấu SQL ban đầu?
Thông thường, các thử nghiệm có trách nhiệm tự dọn dẹp (và do đó không gây ô nhiễm môi trường cơ sở dữ liệu cho các thử nghiệm khác). Tuy nhiên, có vẻ như một số các thử nghiệm này không hoàn toàn làm như vậy, và do đó để lại các bản ghi bổ sung/sửa đổi mà chúng không nên làm.
Do bộ mã phức tạp đang được thử nghiệm, không thể có một giao dịch duy nhất chạy cho toàn bộ thử nghiệm, vì vậy tôi không thể chỉ có MySQL cuộn mọi thứ trở lại (có cả hai con trỏ và nhiều máy chủ DB được sao chép liên quan, trong số các yếu tố khác).
Tôi muốn có một cách dễ dàng hơn xác định những thử nghiệm này đang gây ô nhiễm DB, nhưng vì nó là cho phép đối với các bài kiểm tra ghi vào DB (miễn là họ loại bỏ những thứ sau đó), tôi có thể không chỉ xem xét tất cả các thay đổi đối với DB - tôi chỉ cần thay đổi hiệu quả, với các sửa đổi hủy bỏ đã bị xóa. Tôi nghĩ rằng nếu có một cách đơn giản để so sánh nội dung của một bảng với bảng khác, tôi có thể làm như vậy sau khi chạy từng thử nghiệm, so sánh nội dung của bảng được khởi tạo với vật cố với nội dung của bảng sau khi thử nghiệm.
Một phương pháp mà chúng tôi đã sử dụng trong quá khứ là chỉ định giá trị âm cho các khóa chính dựa trên số. Rất dễ dàng để loại bỏ dữ liệu thử nghiệm: 'DELETE FROM TABLE WHERE id <0' –
@OMG Ngựa vằn: Đó là một ý tưởng thông minh; Tôi không chắc liệu codebase của chúng ta có hỗ trợ điều đó hay không (có thể có một số 'x> 0' vân vân đang ngồi xung quanh), nhưng tôi chắc chắn sẽ ghi nhớ điều đó. – Amber