Bagaimana bisa saya mengatur ulang tersebutAUTO_INCREMENT
dari lapangan?
Saya ingin mulai menghitung dari1
lagi.
TRUNCATE TABLE yourTableName;
Bagaimana bisa saya mengatur ulang tersebutAUTO_INCREMENT
dari lapangan?
Saya ingin mulai menghitung dari1
lagi.
TRUNCATE TABLE yourTableName;
Jawaban:
Anda dapat mengatur ulang penghitung dengan:
ALTER TABLE tablename AUTO_INCREMENT = 1
Untuk InnoDB Anda tidak dapat menetapkan auto_increment
nilai lebih rendah atau sama dengan indeks saat ini tertinggi. (kutipan dari ViralPatel ):
Perhatikan bahwa Anda tidak dapat mengatur ulang penghitung ke nilai yang kurang dari atau sama dengan yang sudah digunakan. Untuk MyISAM, jika nilainya kurang dari atau sama dengan nilai maksimum saat ini di kolom AUTO_INCREMENT, nilainya diatur ulang ke maksimum saat ini ditambah satu. Untuk InnoDB, jika nilainya kurang dari nilai maksimum saat ini di kolom, tidak ada kesalahan terjadi dan nilai urutan saat ini tidak berubah.
Lihat Cara Mengatur Ulang MySQL AutoIncrement menggunakan nilai MAX dari tabel lain? tentang bagaimana secara dinamis mendapatkan nilai yang dapat diterima.
circular reference
curcular reference
?
ALTER TABLE tablename AUTO_INCREMENT = 1
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Saya pikir ini akan melakukannya
UPDATE
akan memperbarui semua nilai dalam id
kolom.
Cukup seperti ini:
ALTER TABLE tablename AUTO_INCREMENT = value;
referensi: http://dev.mysql.com/doc/refman/5.1/id/alter-table.html
reset
berarti mengaturnya ke nilai default ... sehingga Anda dapat mengganti "value" dengan 1
Ada cara yang sangat mudah dengan phpmyadmin di bawah tab "operasi", Anda dapat mengatur, dalam opsi tabel, peningkatan otomatis ke nomor yang Anda inginkan.
Solusi terbaik yang bekerja untuk saya:
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED;
COMMIT;
ALTER TABLE my_table MODIFY COLUMN ID INT(10) UNSIGNED AUTO_INCREMENT;
COMMIT;
Cepat, bekerja dengan innoDB, dan saya tidak perlu tahu nilai maksimum saat ini! Dengan cara ini penghitung kenaikan otomatis akan mengatur ulang dan itu akan mulai secara otomatis dari nilai maksimum yang ada.
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name = 'my_table' AND table_schema = DATABASE( ) ;
5.6.15
, sedangkan ALTER TABLE tablename AUTO_INCREMENT = 1
tidak tidak .
Jawaban dengan nilai tertinggi untuk pertanyaan ini semuanya merekomendasikan "ALTER yourtable AUTO_INCREMENT = value". Namun, ini hanya berfungsi ketika value
di alter lebih besar dari nilai maks saat ini dari kolom peningkatan otomatis. Menurut dokumentasi MySQL 8 :
Anda tidak dapat mengatur ulang penghitung ke nilai yang kurang dari atau sama dengan nilai yang saat ini digunakan. Untuk InnoDB dan MyISAM, jika nilainya kurang dari atau sama dengan nilai maksimum yang saat ini ada di kolom AUTO_INCREMENT, nilainya diatur ulang ke nilai kolom AUTO_INCREMENT maksimum saat ini ditambah satu.
Intinya, Anda hanya dapat mengubah AUTO_INCREMENT untuk meningkatkan nilai kolom peningkatan otomatis, bukan mengatur ulangnya menjadi 1, karena OP bertanya di bagian kedua pertanyaan. Untuk opsi yang benar-benar memungkinkan Anda mengatur AUTO_INCREMENT ke bawah dari maksnya saat ini, lihat Menyusun Ulang / reset kunci primer kenaikan otomatis .
Menambahkan pembaruan karena fungsi berubah di MySQL 5.6. Pada MySQL 5.6 Anda BISA menggunakan ALTER TABLE sederhana dengan InnoDB:
ALTER TABLE tablename AUTO_INCREMENT = 1;
Dokumen diperbarui untuk mencerminkan ini:
http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
Pengujian saya juga menunjukkan bahwa tabel TIDAK disalin, nilainya hanya diubah.
Ada opsi bagus yang diberikan di Cara Mengatur Ulang Kolom MySQL Autoincrement
Perhatikan bahwa ALTER TABLE tablename AUTO_INCREMENT = value;
tidak tidak bekerja untuk InnoDB
DELETE
(atau ROLLBACK
) tidak akan memulihkan id. Satu pengecualian: Setelah restart (atau crash), id berikutnya dihitung MAX(id)+1
, dengan demikian secara efektif memulihkan id yang dihapus pada akhirnya . Pengecualian untuk pengecualian: MySQL 8.0 membuat id tersebut tidak digunakan.
ALTER TABLE news_feed DROP id
ALTER TABLE news_feed ADD id BIGINT( 200 ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (id)
Saya menggunakan ini di beberapa skrip saya, bidang id turun dan kemudian ditambahkan kembali dengan pengaturan sebelumnya, semua bidang yang ada dalam tabel database diisi dengan nilai kenaikan otomatis baru, ini juga harus bekerja dengan InnoDB.
Perhatikan bahwa semua bidang dalam tabel akan dihitung ulang dan akan memiliki id lainnya !!!.
Anda juga dapat menggunakan TRUNCATE
tabel sintaks seperti ini:
TRUNCATE TABLE table_name
WASPADALAH !! TRUNCATE TABLE your_table
akan menghapus semua yang ada di your_table
!!
TRUNCATE
ini juga akan menghapus SEMUA baris Anda di tabel yang ditentukan!
TRUNCATE
akan mengatur ulang auto_increment
bidang juga? Kasus penggunaan saya adalah untuk menghapus data lama dalam tabel dan mulai ID dari 1 lagi untuk data baru (bayangkan, membersihkan tabel untuk penggunaan yang benar setelah pengujian selesai). Saya pikir saya harus ke DROP
seluruh meja dan CREATE
lagi.
auto_increment
, gunakan DELETE FROM
sebagai ganti TRUNCATE
.
itu untuk tabel kosong:
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
jika Anda memiliki data tetapi Anda ingin merapikannya, saya sarankan gunakan ini:
ALTER TABLE `table_name` DROP `auto_colmn`;
ALTER TABLE `table_name` ADD `auto_colmn` INT( {many you want} ) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`auto_colmn`);
Inilah solusi saya, tetapi saya tidak akan menyarankan untuk melakukan ini jika kolom Anda memiliki kendala atau terhubung sebagai kunci asing ke tabel lain karena akan memiliki efek buruk atau bahkan tidak akan berfungsi.
ALTER TABLE tbl_name DROP COLUMN column_id
ALTER TABLE tbl_access ADD COLUMN `access_id` int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
Ini bekerja dengan baik!
Pada MySQL 5.6 pendekatan di bawah ini bekerja lebih cepat karena DDL online (catatan algorithm=inplace
):
alter table tablename auto_increment=1, algorithm=inplace;
Anda cukup memotong tabel untuk mengatur ulang urutan
TRUNCATE TABLE TABLE_NAME
Saya mencoba mengubah tabel dan mengatur auto_increment ke 1 tetapi tidak berhasil. Saya memutuskan untuk menghapus nama kolom yang saya tambahkan, kemudian buat kolom baru dengan nama pilihan Anda dan atur kolom baru itu untuk ditambahkan dari awal.
Penghitung kenaikan otomatis untuk tabel dapat (diatur ulang) dengan dua cara:
Dengan menjalankan kueri, seperti yang sudah dijelaskan orang lain:
ALTER TABLE <table_name> AUTO_INCREMENT=<table_id>;
Menggunakan Workbench atau alat desain database visual lainnya. Saya akan menunjukkan di Workbench bagaimana hal itu dilakukan - tetapi seharusnya tidak jauh berbeda dengan alat lain juga. Dengan mengklik kanan pada tabel yang diinginkan dan memilih Alter table
dari menu konteks. Di bagian bawah Anda dapat melihat semua opsi yang tersedia untuk mengubah tabel. Pilih Options
dan Anda akan mendapatkan formulir ini:
Kemudian cukup atur nilai yang diinginkan di bidang Auto increment
seperti yang ditunjukkan pada gambar. Ini pada dasarnya akan mengeksekusi query yang ditunjukkan pada opsi pertama.
Untuk memperbarui terbaru ditambah satu id
ALTER TABLE table_name AUTO_INCREMENT =
(SELECT (id+1) id FROM table_name order by id desc limit 1);
ALTER TABLE tablename AUTO_INCREMENT = 1
Saya mencari di Google dan menemukan pertanyaan ini, tetapi jawaban yang saya cari memenuhi dua kriteria:
Karena saya tidak dapat menemukan apa yang saya inginkan di sini, saya membuat jawaban dari berbagai jawaban dan membagikannya di sini.
Beberapa hal yang perlu diperhatikan:
id
dengan tipe sebagaiint
kunci utamabuat prosedur tersimpan seperti ini:
DELIMITER //
CREATE PROCEDURE reset_autoincrement(IN tablename varchar(200))
BEGIN
SET @get_next_inc = CONCAT('SELECT @next_inc := max(id) + 1 FROM ',tablename,';');
PREPARE stmt FROM @get_next_inc;
EXECUTE stmt;
SELECT @next_inc AS result;
DEALLOCATE PREPARE stmt;
set @alter_statement = concat('ALTER TABLE ', tablename, ' AUTO_INCREMENT = ', @next_inc, ';');
PREPARE stmt FROM @alter_statement;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
Kemudian jalankan.
Sebelum dijalankan, ini terlihat seperti ini ketika Anda melihat di bawah Prosedur Tersimpan di database Anda.
Ketika saya menjalankan, saya cukup memilih prosedur yang tersimpan dan tekan Run Selection
Catatan: bagian pembatas sangat penting. Karenanya, jika Anda menyalin dan menempel dari jawaban yang dipilih teratas dalam pertanyaan ini, mereka cenderung tidak bekerja karena alasan ini.
Setelah saya menjalankan, saya harus melihat prosedur yang tersimpan
Jika Anda perlu mengubah prosedur tersimpan, Anda harus menghapus prosedur tersimpan, lalu pilih untuk menjalankan lagi.
Kali ini Anda cukup menggunakan kueri MySQL normal.
call reset_autoincrement('products');
Awalnya dari catatan kueri SQL saya sendiri di https://simkimsia.com/library/sql-queries/#mysql-reset-autoinc dan diadaptasi untuk StackOverflow
SET @num := 0;
UPDATE your_table SET id = @num := (@num+1);
ALTER TABLE your_table AUTO_INCREMENT =1;
Coba Jalankan Pertanyaan Ini
ALTER TABLE tablename AUTO_INCREMENT = value;
Atau Coba Kueri Ini Untuk Setel Ulang Secara Otomatis
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL;
Dan Setel Peningkatan Otomatis Kemudian Jalankan Pertanyaan Ini
ALTER TABLE `tablename` CHANGE `id` `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
Saya sarankan Anda pergi ke Query Browser dan lakukan yang berikut:
Auto_increment akan diatur ulang menjadi satu setelah Anda memasukkan baris baru ke dalam tabel.
Saya tidak tahu apa yang akan terjadi jika Anda mencoba menambahkan baris di mana nilai bidang auto_increment sudah ada.
Semoga bantuan ini!
Cara terbaik adalah menghapus bidang dengan AI dan menambahkannya lagi dengan AI, berfungsi untuk semua tabel