2011-09-27 17 views
5

Tôi đang chèn 500 hàng bằng cách sử dụng INSERT IGNORE, nếu hàng đã tồn tại (dựa trên một trường duy nhất) thì nó chỉ đơn giản là không làm gì cả, nếu nó không chèn hàng.Làm cách nào để dừng tự động tăng trên các lần chèn bị bỏ qua mà không có thay đổi trong MySQL?

Vấn đề của tôi là chỉ nói 10 KHÔNG tồn tại tăng tự động vẫn tăng cho mỗi lần chèn sao cho nó tăng lên 500 vì vậy tôi kết thúc với khoảng trống trong id của tôi. Làm cách nào để ngăn chặn điều này?

Tôi đã thử:

SET global innodb_autoinc_lock_mode = 0; 

Nhưng tôi nhận được lỗi:

1238 - Biến 'innodb_autoinc_lock_mode' là một chỉ đọc biến

Làm thế nào để thay đổi điều này?

+0

Có thể trùng lặp: http://stackoverflow.com/questions/5655396/why-insert-ignore-increments-the-auto-increment-primary-key –

+0

Cảm ơn bạn đã liên kết, tôi đã xem xét điều này và chỉnh sửa câu hỏi để bao gồm những gì tôi đã thử. – Craig

+5

tại sao bạn * quan tâm * nếu có khoảng trống? – SingleNegationElimination

Trả lời

10

Theo MySQL's documentation, innodb_autoinc_lock_mode không phải là biến động và do đó không thể thay đổi khi MySQL đang chạy.

Bạn sẽ có thể sở để thiết lập nó trong dòng lệnh

--innodb_autoinc_lock_mode=0 

hoặc trong tập tin cấu hình (mysql.ini)

innodb_autoinc_lock_mode=0 

Cần lưu ý rằng bạn không nên (đọc : không bao giờ) dựa vào chuỗi id liên tục. Giao dịch bị thu hồi hoặc không thành công có thể dẫn đến khoảng trống.

+0

Cảm ơn bạn. Tôi đã thêm dòng đó vào tệp my.cnf và khởi động lại mysql – Craig

Các vấn đề liên quan