Saya perlu menghapus semua baris dari sebuah tabel tetapi ketika saya menambahkan baris baru, saya ingin ID kunci utama, yang memiliki kenaikan otomatis, untuk mulai lagi dari 0 masing-masing dari 1.
Saya perlu menghapus semua baris dari sebuah tabel tetapi ketika saya menambahkan baris baru, saya ingin ID kunci utama, yang memiliki kenaikan otomatis, untuk mulai lagi dari 0 masing-masing dari 1.
Jawaban:
Jangan hapus, gunakan terpotong:
Truncate table XXX
Penangan tabel tidak mengingat nilai AUTO_INCREMENT yang terakhir digunakan, tetapi mulai menghitung dari awal. Ini berlaku bahkan untuk MyISAM dan InnoDB, yang biasanya tidak menggunakan kembali nilai urutan.
Sumber .
Jika Anda tidak dapat menggunakan TRUNCATE
(misalnya karena batasan kunci asing) Anda dapat menggunakan tabel alter setelah menghapus semua baris untuk memulai kembali auto_increment:
ALTER TABLE mytable AUTO_INCREMENT = 1
DELETE FROM tablename;
(tapi itu tidak akan berfungsi dengan baik ketika ada kendala FK - lihat stackoverflow.com/a/5452798/507761 )
Jika tabel memiliki kunci asing maka saya selalu menggunakan kode berikut:
SET FOREIGN_KEY_CHECKS = 0; -- disable a foreign keys check
SET AUTOCOMMIT = 0; -- disable autocommit
START TRANSACTION; -- begin transaction
/*
DELETE FROM table_name;
ALTER TABLE table_name AUTO_INCREMENT = 1;
-- or
TRUNCATE table_name;
-- or
DROP TABLE table_name;
CREATE TABLE table_name ( ... );
*/
SET FOREIGN_KEY_CHECKS = 1; -- enable a foreign keys check
COMMIT; -- make a commit
SET AUTOCOMMIT = 1 ;
Tetapi perbedaannya ada pada waktu eksekusi. Lihatlah jawaban Sorin di atas.
Fakta yang menarik.
Saya yakin TRUNCATE
akan selalu berkinerja lebih baik, tetapi dalam kasus saya, untuk database dengan sekitar 30 tabel dengan kunci asing, diisi dengan hanya beberapa baris, butuh sekitar 12 detik untuk TRUNCATE
semua tabel, dibandingkan dengan hanya beberapa ratus milidetik untukDELETE
yang baris. Mengatur penambahan otomatis menambahkan sekitar satu detik secara total, tetapi masih jauh lebih baik.
Jadi saya sarankan coba keduanya, lihat mana yang bekerja lebih cepat untuk kasus Anda.