viola ver una tabla restricciones restriccion quitar primarias llave las inserción foránea foreign foranea deshabilitar desactivar constraint como claves clave actualización mysql perl scripting

mysql - ver - restriccion de clave foranea phpmyadmin



deshabilitar la comprobación de clave externa Eliminación de tablas InnoDB Perl Script (1)

Estableciendo el valor de FOREIGN_KEY_CHECKS en cero:

SET FOREIGN_KEY_CHECKS = 0;

... antes de los scripts desplegables se deshabilitará la excepción de clave externa de ancho. Debido a que puede tener más de un catálogo / base de datos en una instancia de MySQL, esto puede tener un impacto sobre cualquier otra cosa en la base de datos.

El hábito general es guiarlos por orden de dependencia de clave, eliminando / truncando datos de las tablas principales antes que los secundarios.

Soy bastante nuevo en el uso de MySQL y un principiante total en Perl, pero estoy tratando de hackear el guión de otra persona para que me ayude. Obtuve el guion desde aquí . Se ve muy bien hasta el momento, pero falla ya que las tablas tienen algún control de clave externa pasando. Podría ir a través de phpmyadmin y tratar de eliminarlos uno por uno, pero esto toma para siempre y es la tercera vez que tengo que hacer esto :( Mi pregunta es, ¿puede este script ser modificado para incluir:

`SET FOREIGN_KEY_CHECKS = 0;

antes de ejecutar el comando drop table? Traté de seguir el guión pero no pude encontrar un comando definitivo como parte del guión (probablemente debido a ignorancia / falta de comprensión). Cualquier ayuda muy apreciada.

#!/usr/bin/perl use strict; use DBI; my $hostname = ''''; my $database = ''''; my $username = ''''; my $password = ''''; my $dbh = DBI->connect("dbi:mysql:${database}:$hostname", $username, $password) or die "Error: $DBI::errstr/n"; my $sth = $dbh->prepare("SHOW TABLES"); $sth->execute or die "SQL Error: $DBI::errstr/n"; my $i = 0; my @all_tables = (); while(my $table = $sth->fetchrow_array) { $i++; print "table $i: $table/n"; push @all_tables, $table; } my $total_table_count = $i; print "Enter string or regex to match tables to " . "delete (won''t delete yet): "; my $regex = <STDIN>; chomp $regex; $i = 0; my @matching_tables = (); foreach my $table (@all_tables) { if($table =~ /$regex/i) { $i++; print "matching table $i: $table/n"; push @matching_tables, $table; } } my $matching_table_count = $i; if($matching_table_count) { print "$matching_table_count out of $total_table_count " . "tables match, and will be deleted./n"; print "Delete tables now? [y/n] "; my $decision = <STDIN>; chomp $decision; $i = 0; if($decision =~ /y/i) { foreach my $table (@matching_tables) { $i++; print "deleting table $i: $table/n"; my $sth = $dbh->prepare("DROP TABLE $table"); $sth->execute or die "SQL Error: $DBI::errstr/n"; } } else { print "Not deleting any tables./n"; } } else { print "No matching tables./n"; }