防止向MYSQL插入相同数据的Perl

防止向MYSQL插入相同数据的Perl,mysql,perl,Mysql,Perl,我有一个散列数组,我对它进行差分,并将其相应地插入到一个表位置,以便它适合列名。代码如下: my $dsn = "DBI:mysql:saferoute"; my $username = "root"; my $password = "password"; my %attr = (PrintError=>0,RaiseError=>1); my $dbh = DBI->connect($dsn,$username,$password,\%attr); while (my (

我有一个散列数组,我对它进行差分,并将其相应地插入到一个表位置,以便它适合列名。代码如下:

my $dsn = "DBI:mysql:saferoute";
my $username = "root";
my $password = "password";

my %attr = (PrintError=>0,RaiseError=>1);
my $dbh = DBI->connect($dsn,$username,$password,\%attr);

while (my ($year, $year_ref) = each(%$stat) ){
    while (my ($state, $state_ref) = each(%$year_ref) ){
            while (my ($city, $city_ref) = each(%$state_ref) ){
                    foreach my $crime_ref (@$city_ref){
                            while (my ($crime, $crime_stat) = each (%$crime_ref) ){
                                    my $sql = qq|INSERT INTO LOCATION (COUNTRY, STATE, DISTRICT, CITY, LOCALITY_NAME, PIN_CODE, SAFETY_RANKING) VALUES ('IN', '$state', '$city', '$city', 'city', '11111', 1)|;
                                    my $stmt = $dbh->do($sql);
                    }
                    }
            }
    }
}
$dbh->disconnect();
代码运行良好,并相应地插入数据。但每当我运行上面的脚本时,它就会填充数据。例如,我第一次运行它时,它会创建1000行,下次它会创建2000行,以此类推。关于如何防止在单个行中插入相同类型的数据的任何建议。多谢各位

  • 添加条件语句
  • 从sql中提取已经生成的数据
  • 检查它是否等于插入的值
  • 如果是数据!=数据插入
  • 您可能也对一些模块感兴趣 类::DBI,Rose::DB,DBIx::Class

    看看这些。。。可能会让你的生活更轻松。。。祝你好运