Perl MySQL删除数据

时间:2019-11-20 08:52:38  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用Perl DBI删除MySQL表中的数据。

您使用DELETE语句删除表中的一个或多个行。
要删除表中的所有行,请使用不带WHERE子句的DELETE语句。
若要更有效地删除大表中的所有行,请使用TRUNCATE TABLE语句。

要删除相关表中的行,请使用外键的DELETE JOIN语句或ON DELETE CASCADE引用动作。

Perl MySQL删除数据的步骤

要从Perl程序中删除MySQL表中的数据,您需要使用以下步骤:

首先,使用connect()方法连接到MySQL数据库:

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

接下来,要从表中删除一行,请使用带有WHERE子句的DELETE语句。
您需要将占位符(?)放在DELETE语句中,以便将值从程序传递到该语句。
占位符(?)将替换为值。

my $sql = "DELETE FROM table_name WHERE id=?";
my $sth = $dbh->prepare($sql);

然后,调用语句句柄对象的execute()方法执行查询。
您还需要将替换DELETE语句中占位符的参数传递给execute()方法。

$sth->execute($id);

之后,断开与MySQL数据库的连接。

$dbh->disconnect();

最后,您可以显示一条消息以指定该行已成功删除。

Perl MySQL删除数据示例

我们为演示制作了链接表的副本。

CREATE TABLE clinks
SELECT * FROM links;

MySQL创建了一个名为clinks的新表,该表的结构和数据与links表相同。

以下是clinks表的内容:

SELECT * FROM clinks;

以下程序首先删除ID为1的链接,然后截断clinks表。

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

say "Perl MySQL Delete Data Demo";

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# connect to MySQL database
my %attr = (PrintError=>0, RaiseError=>1);

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

# delete 1 row with id 1
# say "Link with id 1 deleted successfully!" if delete_one_row($dbh,1);

# delete all rows in the clinks table
# say "All links deleted successfully!" if delete_all_rows($dbh);

# disconnect from the MySQL database
$dbh->disconnect();

sub delete_one_row {
    # delete one row from table
    # $dbh: database handle
    # $link_id: id of the link that need to delete
    my($dbh,$link_id)  = @_;
    my $sql = "DELETE FROM clinks WHERE link_id = ?";
    my $sth = $dbh->prepare($sql);
    return $sth->execute($link_id);
}

sub delete_all_rows {
    # delete all rows in the clinks table
    my($dbh) = @_;
    my $sql = "TRUNCATE TABLE clinks";
    my $sth = $dbh->prepare($sql);
    return $sth->execute(); 
}

首先,删除对delete_one_row()子例程的调用的注释并执行程序。
我们收到以下消息:

Perl MySQL Delete Data Demo
Link with id 1 deleted successfully!

检查clinks表以确认删除:

SELECT * FROM clinks;

其次,注释对delete_on_row()子例程的调用,删除对delete_all_rows()子例程的调用的注释,然后执行程序:

Perl MySQL Delete Data Demo
All links deleted successfully!

再次查询clinks表以验证截断表操作:

SELECT * FROM clinks;

它不返回任何行,正如我们期望的那样。

在本教程中,我们向您展示了如何使用Perl DBI删除MySQL数据库表中的数据。