MySQL Auto_increment berjalan 2 demi 2

8

Saya menginstal MySQL Workbench tempo hari, mengakses basis data perusahaan saya dan membuat sendiri tabel untuk saya kerjakan. Sejauh ini bagus. Masalahnya adalah, saya perhatikan auto_increment saya bertambah 2 kali 2. Misalnya:

ID    NAME
1     Paul
3     Jack
5     Louis
7     John
...

Ketika saya melakukannya SHOW VARIABLES LIKE 'auto_inc%'saya mendapatkan ini:

'auto_increment_increment', '2'
'auto_increment_offset', '1'

Jadi saya mencoba mengatur auto_increment_incrementke 1 dengan:

SET @@auto_increment_increment=1

Dan setelah memverifikasi lagi dengan SHOW VARIABLES LIKE 'auto_inc%'saya mengkonfirmasi itu "berhasil" dengan hasil:

'auto_increment_increment', '1'
'auto_increment_offset', '1'

Tapi ID saya masih bertambah 2 demi 2 .

Pertama kali saya melakukannya, itu bekerja dengan baik dan kemudian saya menutup MySQL Workbench untuk menyadari bahwa ketika saya membukanya lagi, auto_increment_incrementdiatur ke 2 lagi. Sekarang saya mencoba melakukannya lagi, tetapi tampaknya tidak berhasil lagi.

Adakah yang bisa membantu saya dengan ini?

Terima kasih kawan

Bernardo Oliveira
sumber
2
Saya akan berhati-hati mengubah nilai ini tanpa sepenuhnya memahami mengapa lingkungan perusahaan kami menetapkan itu. Ini adalah variabel yang umum untuk diubah saat berjalan dalam pengaturan replikasi multi-master, misalnya. Juga, bisakah kita mendapatkan pernyataan SHOW CREATE TABLE untuk tabel yang Anda uji (pengujian pada produksi juga merupakan ide yang buruk, btw)
Derek Downey
Saya pikir ini pantas menjadi jawaban. Atau untuk ditambahkan yang sudah ada, apa pun yang Anda inginkan. Tindakan terbaik adalah tindakan hati-hati - atau tidak ada tindakan sama sekali - untuk DBA yang ingin mempertahankan pekerjaan mereka.
ypercubeᵀᴹ

Jawaban:

7

Awalan yang digunakan:

SET @@auto_increment_increment=1;

Sama dengan:

SET @@SESSION.auto_increment_increment=1;

Saat memodifikasi pengaturan ini, itu menjadi relevan hanya di sesi Anda saat ini.

Untuk membuat perbaikan yang lebih permanen coba:

SET GLOBAL auto_increment_increment=1;

Sama dengan:

SET @@GLOBAL.auto_increment_increment=1;
Morgan Tocker
sumber
Hah, saya pikir @@ adalah atribut sesi. Dari manual mysql: "Untuk menunjukkan secara eksplisit bahwa suatu variabel adalah variabel sesi, awali namanya dengan SESSION, @@ session., Atau @@" dev.mysql.com/doc/refman/5.1/en/set-option. html
Derek Downey
Hmm .. begitulah. Pulihkan jawaban pertamaku.
Morgan Tocker
Hei Morgan, terima kasih atas jawabannya! Tetapi bagaimana jika saya tidak ingin atau tidak dapat melakukan SET GLOBAL? Bisakah saya mengaturnya hanya untuk db / table saya yang sangat spesifik tanpa harus menggunakan variabel sesi?
Bernardo Oliveira
Jika Anda tidak dapat SET GLOBAL, setiap sesi Anda tidak ingin perilaku ini dijalankan SET auto_increment_increment = 1;
Morgan Tocker
2

Kedua variabel memiliki nilai global dan sesi. Jadi sangat mungkin Anda hanya mengubah nilai sesi yang hilang ketika Anda menutup Workbench MySQL.

Peringatan lain yang harus diperhatikan, adalah itu

variabel-variabel ini mengontrol perilaku semua kolom AUTO_INCREMENT di semua tabel di server MySQL. Jika nilai global dari salah satu variabel diatur, efeknya tetap ada sampai nilai global diubah atau diganti dengan menetapkan nilai sesi, atau sampai mysqld dimulai kembali. Jika nilai lokal disetel, nilai baru memengaruhi kolom AUTO_INCREMENT untuk semua tabel di mana baris baru dimasukkan oleh pengguna saat ini selama durasi sesi, kecuali jika nilainya diubah selama sesi itu.

Yang juga mungkin menipu Anda, adalah cara nilai autoincrement berikutnya dihitung ketika Anda mengubah ukuran kenaikan. Itu tidak menggunakan nilai kolom yang terakhir disimpan, tetapi menghitung nilai tertinggi berikutnya menggunakan rumus

auto_increment_offset + N × auto_increment_increment

sedangkan N adalah bilangan bulat, sehingga nilai baru lebih besar dari yang terbesar yang ada.

Lihat dokumentasi auto_increment_increment cara kerjanya secara detail.

MicSim
sumber
Itu informasi yang sangat berguna. Terima kasih micim! Memang saya hanya mengubah nilai sesi. Mencoba mencari cara untuk mengubahnya secara permanen tetapi hanya untuk satu db atau tabel. Ada ide?
Bernardo Oliveira
Seperti yang dikatakan dalam dokumentasi, tidak mungkin untuk mengaturnya db atau table-wise. Maaf, saya tidak dapat membantu Anda di sini. Mungkin Anda mencoba mencapai sesuatu dengan fitur peningkatan otomatis yang tidak dimaksudkan untuk itu.
MicSim