Bagaimana cara memotong tabel dengan benar?

Saya menggunakan datamapper dengan ruby untuk menyimpan data ke tabel-tabel tertentu.

Beberapa tabel memiliki informasi yang sangat banyak dan saya ingin menghapusnya ketika pengguna 'membangun ulang basis data ' (pada dasarnya menghapus semuanya dan menghitung ulang data).

Saya awalnya mencoba Forum.all.destroy dan melakukannya untuk semua tabel yang berbeda, tetapi saya melihat beberapa di antaranya tidak terhapus dari dalam phpmyadmin. saya hanya bisa membayangkan itu karena kunci asing. Meskipun saya benar-benar tidak tahu karena tabel saya yang lain yang memiliki kunci asing berhasil dihapus. Belum lagi, id lebih baik hanya 'nol ' saja sehingga kunci tidak sampai pada angka yang sangat besar (seperti kunci # 500.000).

Saya kemudian mencoba menjalankannya dengan kode di bawah ini, tetapi tidak dapat menghapus tabel karena adanya 'kendala kunci asing '. Saya ingin memaksanya bekerja karena saya tahu pasti bahwa saya menghapus semua tabel yang saling bergantung satu sama lain (saya hanya tidak menghapus 2 tabel, yaitu tabel pengaturan dan tabel penyimpanan acak, yang keduanya tidak menggunakan kunci asing).

Sejauh ini saya sudah...

adapter = DataMapper.repository(:default).adapter
adapter.execute('TRUNCATE TABLE `forums`, `dates`, `remarks`');

Itu akan baik-baik saja kecuali sintaks mysqlnya salah. jadi itu yang pertama

Saya melakukannya 1 per 1 di phpmyadmin dan ketika saya melakukannya dengan cara itu, ia mengatakan

Cannot truncate a table referenced in a foreign key constraint
Larutan

Rencana A:

SET FOREIGN_KEY_CHECKS = 0; -- Disable foreign key checking.
TRUNCATE TABLE forums;
TRUNCATE TABLE dates;
TRUNCATE TABLE remarks;
SET FOREIGN_KEY_CHECKS = 1; -- Enable foreign key checking.

Rencana B:

Anda harus memotong tabel anak terlebih dahulu, lalu tabel induk.

Menonaktifkan pemeriksaan kunci asing berisiko memasukkan baris ke dalam tabel Anda yang tidak mematuhi batasan yang dapat menyebabkan perilaku yang tidak terdefinisi.

Komentar (3)

Alih-alih menggunakan Nonaktifkan pengecekan kunci asing..

Anda dapat menggunakan kode di bawah ini.

DELETE FROM forums;
ALTER TABLE forums AUTO_INCREMENT = 1;

DELETE FROM dates;
ALTER TABLE dates AUTO_INCREMENT = 1;

DELETE FROM remarks;
ALTER TABLE remarks AUTO_INCREMENT = 1;

Ini hanya akan menghapus semua baris dan membuat kenaikan id dari 1 dan seterusnya._

Komentar (0)