22-08-2015, 10:42 AM
Salut,
les tables à clefs étrangères ne peuvent effectivement pas être vidées via TRUNCATE (c'est un peu dommage), mais il me semble qu'elles peuvent l'être via DELETE (à condition que les contraintes de clef soient respectées par ce DELETE). A voir aussi si la contrainte "ON DELETE CASCADE" contourne le problème du truncate (mais c'est le genre de contrainte risquée qui peut faire sauter une base entière si elle est trop et mal utilisée).
Sinon, la méthode consiste simplement à dire à MySQL de ne pas vérifier les contraintes de clef pour cette session (SET FOREIGN_KEY_CHECKS=0), de faire ses truncates, puis de remettre la vérification des contraintes (si on a d'autres requêtes à faire dans cette session, cette variable ainsi définie étant par session).
Perso, je les fais vérifier par le SQL et surtout pas par le PHP. Le SQL est en effet plus véloce à ce genre de chose, et surtout, suppose qu'on ait deux langages qui requêtent la même BDD, alors les checks devraient être fait dans les 2 langages (et au taff, on a 2 langages). En plus, c'est natif MySQL: pas de framework ni rien.
les tables à clefs étrangères ne peuvent effectivement pas être vidées via TRUNCATE (c'est un peu dommage), mais il me semble qu'elles peuvent l'être via DELETE (à condition que les contraintes de clef soient respectées par ce DELETE). A voir aussi si la contrainte "ON DELETE CASCADE" contourne le problème du truncate (mais c'est le genre de contrainte risquée qui peut faire sauter une base entière si elle est trop et mal utilisée).
Sinon, la méthode consiste simplement à dire à MySQL de ne pas vérifier les contraintes de clef pour cette session (SET FOREIGN_KEY_CHECKS=0), de faire ses truncates, puis de remettre la vérification des contraintes (si on a d'autres requêtes à faire dans cette session, cette variable ainsi définie étant par session).
Perso, je les fais vérifier par le SQL et surtout pas par le PHP. Le SQL est en effet plus véloce à ce genre de chose, et surtout, suppose qu'on ait deux langages qui requêtent la même BDD, alors les checks devraient être fait dans les 2 langages (et au taff, on a 2 langages). En plus, c'est natif MySQL: pas de framework ni rien.