gpt4 book ai didi

mysql - 禁用外键检查删除 InnoDB 表 Perl 脚本

转载 作者:可可西里 更新时间:2023-11-01 06:29:17 25 4
gpt4 key购买 nike

我对使用 MySQL 还很陌生,在 Perl 方面完全是个新手,但我正试图破解别人的脚本来帮助我。我从 here 得到脚本.到目前为止它看起来不错,但它失败了,因为表正在进行一些外键检查。我可以通过 phpmyadmin 并尝试将它们一一删除,但这需要永远并且是我第三次必须这样做 :( 我的问题是,这个脚本可以修改为包括:

`SET FOREIGN_KEY_CHECKS = 0;

在它运行 drop table 命令之前?我试图按照脚本进行操作,但找不到脚本的明确命令部分(可能是由于无知/缺乏理解)。非常感谢任何帮助。

#!/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";
}

最佳答案

设置FOREIGN_KEY_CHECKS value归零:

SET FOREIGN_KEY_CHECKS = 0;

...在删除脚本之前将禁用实例范围内的外键约束。因为您可以在一个 MySQL 实例上拥有多个目录/数据库,所以这可能会影响数据库方面的任何其他方面。

一般习惯是按照键依赖顺序编写脚本,在子表之前从父表中删除/截断数据。

关于mysql - 禁用外键检查删除 InnoDB 表 Perl 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com