Dalam MySQL, saya punya meja, dan saya ingin mengatur auto_incrementnilai 5bukan 1. Apakah ini mungkin dan pernyataan permintaan apa yang melakukan ini?
@VasiliiSuricov You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.source Jika tidak ada nilai yang lebih tinggi dari apa yang Anda ingin atur auto_incrementkolom ed Anda, Anda juga dapat mengurangi nilainya. ( dokumentasi mysql )
seyfahni
Jawaban:
520
Anda dapat menggunakan ALTER TABLEuntuk mengubah nilai awal auto_increment:
Adakah yang tahu apakah mungkin melakukan TANPA ALTER?
smartphone
3
Iya itu mungkin. Lihat balasan saya.
Cosimo
3
MySQL 5.6 memiliki bug yang tidak memungkinkan Anda menurunkan AUTO_INCREMENTnilainya, tetapi telah diperbaiki di 5.6.16 dan 5.7.4, lihat bugs.mysql.com/bug.php?id=69882
Daniel Vandersluis
3
Lihatlah peringatan cosimo tentang meja yang sedang dibangun kembali jika Anda melakukan ini!
h00ligan
15
Untuk memperjelas: Menetapkan nilai awal ke 5, berarti bahwa sisipan berikutnya adalah 5.
Steen Schütt
97
Ya, Anda bisa menggunakan ALTER TABLE t AUTO_INCREMENT = 42pernyataan itu. Namun, Anda perlu menyadari bahwa ini akan menyebabkan pembangunan kembali seluruh tabel Anda, setidaknya dengan InnoDB dan versi MySQL tertentu. Jika Anda memiliki dataset yang sudah ada dengan jutaan baris, mungkin perlu waktu yang sangat lama untuk diselesaikan .
Dalam pengalaman saya, lebih baik melakukan hal berikut:
BEGIN WORK;-- You may also need to add other mandatory columns and valuesINSERTINTO t (id)VALUES(42);ROLLBACK;
Dengan cara ini, bahkan jika Anda mengembalikan transaksi, MySQL akan mempertahankan nilai kenaikan otomatis, dan perubahan akan diterapkan secara instan.
Anda dapat memverifikasi ini dengan mengeluarkan SHOW CREATE TABLE tpernyataan. Anda harus melihat:
> SHOW CREATETABLE t \G
***************************1.row***************************Table: t
CreateTable:CREATETABLE`t`(...) ENGINE=InnoDB AUTO_INCREMENT=43...
TERIMA KASIH! SET foreign_key_checks = 0;juga berguna untuk ini.
dnozay
Ide brilian! Nitpick: SHOW CREATE TABLE tbenar-benar akan kembali 43, yaitu nilai berikutnya setelah memasukkan 42.
petrkotek
2
@cosimo, Tunggu, bukankah ini tidak berdokumen ? Apakah manual mengatakan bahwa itu harus berfungsi seperti itu? Jika tidak, itu mungkin rusak dalam pengaturan mysql (masa depan) yang berbeda.
Pacerier
1
@Pacerier ya, Anda benar. Ini bergantung pada cara kerja MySQL saat ini. Mungkin tidak akan berfungsi seperti itu di masa depan. Mengingat sejarah MySQL, saya akan menganggap itu akan terus bekerja seperti itu untuk waktu yang lama.
Cosimo
@cosimo, Semoga mereka akan mendokumentasikannya sehingga kode yang andal benar-benar dapat menggunakan hack yang baik ini Sampai sekarang, kode yang ingin diandalkan tidak dapat menggunakan ini.
Pacerier
13
Cara menambahkan otomatis satu per satu, mulai dari 10 di MySQL:
createtable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'10','abc''11','def''12','xyz'
Otomatis ini menambah kolom id dengan satu mulai dari 10.
Peningkatan otomatis dalam MySQL sebesar 5, mulai dari 10:
droptable foobar
createtable foobar(
id INT PRIMARYKEY AUTO_INCREMENT,
moobar VARCHAR(500));SET@@auto_increment_increment=5;ALTERTABLE foobar AUTO_INCREMENT=10;INSERTINTO foobar(moobar)values("abc");INSERTINTO foobar(moobar)values("def");INSERTINTO foobar(moobar)values("xyz");select*from foobar;'11','abc''16','def''21','xyz'
Otomatis ini menambah kolom id sebanyak 5 setiap kali, mulai dari 10.
Anda juga dapat melakukannya menggunakan phpmyadmin. Cukup pilih tabel daripada pergi ke tindakan. Dan ubah opsi kenaikan otomatis di bawah tabel. Jangan lupa klik saat mulai
You can change this option with ALTER TABLE, but in that case the new value must be higher than the highest value which is present in the AUTO_INCREMENT column.
source Jika tidak ada nilai yang lebih tinggi dari apa yang Anda ingin aturauto_increment
kolom ed Anda, Anda juga dapat mengurangi nilainya. ( dokumentasi mysql )Jawaban:
Anda dapat menggunakan
ALTER TABLE
untuk mengubah nilai awal auto_increment:Lihat referensi MySQL untuk lebih jelasnya.
sumber
AUTO_INCREMENT
nilainya, tetapi telah diperbaiki di 5.6.16 dan 5.7.4, lihat bugs.mysql.com/bug.php?id=69882Ya, Anda bisa menggunakan
ALTER TABLE t AUTO_INCREMENT = 42
pernyataan itu. Namun, Anda perlu menyadari bahwa ini akan menyebabkan pembangunan kembali seluruh tabel Anda, setidaknya dengan InnoDB dan versi MySQL tertentu. Jika Anda memiliki dataset yang sudah ada dengan jutaan baris, mungkin perlu waktu yang sangat lama untuk diselesaikan .Dalam pengalaman saya, lebih baik melakukan hal berikut:
Dengan cara ini, bahkan jika Anda mengembalikan transaksi, MySQL akan mempertahankan nilai kenaikan otomatis, dan perubahan akan diterapkan secara instan.
Anda dapat memverifikasi ini dengan mengeluarkan
SHOW CREATE TABLE t
pernyataan. Anda harus melihat:sumber
SET foreign_key_checks = 0;
juga berguna untuk ini.SHOW CREATE TABLE t
benar-benar akan kembali43
, yaitu nilai berikutnya setelah memasukkan42
.Cara menambahkan otomatis satu per satu, mulai dari 10 di MySQL:
Otomatis ini menambah kolom id dengan satu mulai dari 10.
Peningkatan otomatis dalam MySQL sebesar 5, mulai dari 10:
Otomatis ini menambah kolom id sebanyak 5 setiap kali, mulai dari 10.
sumber
Prosedur untuk memperbaiki nilai tabel AUTO_INCREMENT secara otomatis
sumber
Jika Anda memerlukan prosedur ini untuk nama bidang variabel,
id
ini mungkin berguna:sumber
Anda juga dapat melakukannya menggunakan phpmyadmin. Cukup pilih tabel daripada pergi ke tindakan. Dan ubah opsi kenaikan otomatis di bawah tabel. Jangan lupa klik saat mulai
sumber
cukup ekspor tabel dengan data .. lalu salin seperti sql-nya
sekarang ubah nilai kenaikan otomatis dan jalankan sql.
sumber