Sql 在数据库中插入新记录之前,如何检查是否存在相同的记录
在数据库中插入新记录之前,如何检查数据库表中是否存在相同的记录?如果存在,那么它应该抛出一条错误消息 我的插入代码:Sql 在数据库中插入新记录之前,如何检查是否存在相同的记录,sql,perl,dbi,sql-insert,Sql,Perl,Dbi,Sql Insert,在数据库中插入新记录之前,如何检查数据库表中是否存在相同的记录?如果存在,那么它应该抛出一条错误消息 我的插入代码: my $sth = $dbh->prepare("INSERT into backlogs (backlogtype, name, startDate, endDate, parent_id) VALUES ('Iteration', '$iter', '" . $iterations{ $iter }->
my $sth = $dbh->prepare("INSERT into backlogs (backlogtype, name, startDate, endDate, parent_id) VALUES ('Iteration', '$iter', '" .
$iterations{ $iter }->{start} . " 08:00', '" .
$iterations{ $iter }->{end} . " 18:00', '" .
$project . "');");
$sth->execute() or die $DBI::errstr;
$sth->finish();
如果表中有任何像id这样的唯一约束,那么代码将自动抛出异常。您只需处理该异常并显示相应的消息/错误。向数据库表添加唯一的约束或索引。具体语法取决于您使用的DBMS。例如,对于SQLLite,这将类似于:
CREATE UNIQUE INDEX backlogs_uc1 ON backlogs(backlogtype, parent_id, start_date);
约束中的具体列取决于您的数据库设计——您需要自然标识每一行的列
如果您这样做,那么现有的Perl将从数据库捕获唯一的约束异常,并打印数据库错误字符串。如果您无法添加约束,下面是一个执行以下操作的示例 预选 免责声明:此方法受到竞争条件和并发性的影响 问题
您可以使用类似以下代码检查是否存在并抛出错误:
my $type = 'the_type';
my $name = 'the_name';
if ( $dbh->selectrow_array("SELECT COUNT(1) FROM backlogs WHERE backlogtype = '$type' and name = '$name'") ) {
croak "Record with backlogtype '$type' and name '$name' already exists.";
}
除了此检查之外,我仍然建议使用唯一约束,以便当用户试图在不使用工具/脚本的情况下将重复数据直接插入数据库时,它仍将被捕获。使用要插入的信息进行选择,并检查是否有结果目标表上是否有唯一的约束/索引?如果是这样,您的代码将自动抛出一条错误消息。@Kiwy PERL新手,我可以知道如何做吗?我将把它放在答案中。如果表中有
primary
键,DB会自动抛出错误。你能用select查询示例显示它吗?如果存在相同的记录,我如何检查并抛出错误?请看下面的两个答案。我可以知道croak是什么吗?@sammy,Carp's croak的行为类似于die,但提供了更多信息。更多详情请参见:和。在你的情况下,在审判中,你仍然可以用骰子代替呱呱叫。
my $type = 'the_type';
my $name = 'the_name';
if ( $dbh->selectrow_array("SELECT COUNT(1) FROM backlogs WHERE backlogtype = '$type' and name = '$name'") ) {
croak "Record with backlogtype '$type' and name '$name' already exists.";
}