Một đồng nghiệp vừa mới làm cho tôi biết về một hành vi MySQL rất lạ.Tại sao tăng tự động MySQL tăng lên khi chèn không thành công?
Giả sử bạn có một bảng có trường auto_increment và một trường khác được đặt thành duy nhất (ví dụ: trường tên người dùng). Khi cố gắng chèn một hàng với một tên người dùng đã có trong bảng chèn không thành công, như mong đợi. Tuy nhiên, giá trị auto_increment được tăng lên khi bạn có thể nhìn thấy khi bạn chèn một mục nhập mới hợp lệ sau một vài lần thử không thành công.
Ví dụ, khi mục cuối cùng của chúng tôi trông như thế này ...
ID: 10
Username: myname
... và chúng tôi cố gắng năm mục mới với giá trị cùng tên người dùng trên chèn tiếp theo của chúng tôi, chúng tôi sẽ đã tạo ra một dòng mới như vậy:
ID: 16
Username: mynewname
trong khi đây không phải là một vấn đề lớn trong bản thân nó có vẻ như một vector tấn công rất ngớ ngẩn để giết một bảng vì lũ lụt nó với yêu cầu chèn thất bại, như MySQL Reference Manual bang:
"Hành vi của cơ chế tăng tự động không được xác định nếu [...] giá trị lớn hơn số nguyên tối đa có thể được lưu trữ trong loại số nguyên được chỉ định."
Hành vi này có được mong đợi không?
vector tấn công của bạn dường như là một vấn đề không. Nếu bạn có thể tràn ngập nó với các yêu cầu chèn không thành công, bạn có thể không đồng thời làm ngập nó với các yêu cầu không thành công không? –
bạn có thể tạo mã ** sao chép thay vì giải thích thủ công không? –
@martin smith: Trong khi đó là sự thật tôi nghĩ rằng một sự đột biến đột ngột của người dùng mới sẽ rõ ràng hơn một sự gia tăng im lặng trong auto_increment mà có thể rất tốt rơi bên lề nếu không được kiểm tra. – Sorcy