2016-04-05 56 views
2

使用Perl DBI,如何检查MySQL列是否为UNIQUE(即具有UNIQUE约束)(假设表名和列名)?Perl DBI MySQL:检查列是否为UNIQUE

+0

通过详细说明您已经尝试过的内容,获得更多更好的答案。 –

+0

@MartinCowie如何解释他尝试得到更好的答案?当他们说“我的代码不工作,帮助我调试它”而不包含任何代码时,问问他们他们尝试了什么是很有意义的,但这里没有任何意义。这个问题很明显,在一个解决方案中尝试一堆失败的尝试会让它杂乱无章。 – ThisSuitIsBlackNot

+0

请你解释一下你想用这些信息做什么?它会帮助我们为你制定更准确的答案。这似乎是一个奇怪的事情,以此为基础的程序流程 – Borodin

回答

2

此函数应该对具有UNIQUE约束的列返回true,否则返回false。

输入值是DBI(mysql)对象,表名和列名。

sub check_uniq { 
    my ($dbh, $table, $column) = @_; 
    $table =~ s/\`//; 
    $table = '`' . $table . '`'; 
    my $sth = $dbh->prepare('SHOW INDEX FROM ' . $table); 
    $sth->execute(); 
    while (my $row = $sth->fetchrow_hashref) { 
     if (($row->{Column_name} eq $column) && (!$row->{Non_unique})) { 
      return 1; 
     } 
    } 
    return 0; 
}