Perl MySQL Delete Data

摘要:在本教程中,您将学习如何使用 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);Code language: Perl (perl)

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

my $sql = "DELETE FROM table_name WHERE id=?";
my $sth = $dbh->prepare($sql);Code language: Perl (perl)

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

$sth->execute($id);Code language: Perl (perl)

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

$dbh->disconnect();Code language: Perl (perl)

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

Perl MySQL 删除数据示例

我们制作links表的副本以供演示。

CREATE TABLE clinks
SELECT * FROM links;Code language: SQL (Structured Query Language) (sql)

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

以下是clinks表的内容:

SELECT * FROM clinks;Code language: SQL (Structured Query Language) (sql)
Perl MySQL Delete Data Example - clinks table

以下程序首先删除 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(); 
}Code language: Perl (perl)

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

Perl MySQL Delete Data Demo
Link with id 1 deleted successfully!Code language: JavaScript (javascript)

检查clinks表以验证删除:

SELECT * FROM clinks;Code language: SQL (Structured Query Language) (sql)
Perl MySQL Delete Data Example - Delete 1 row

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

Perl MySQL Delete Data Demo
All links deleted successfully!

再次查询clinks表来验证 truncate table 操作:

SELECT * FROM clinks;Code language: SQL (Structured Query Language) (sql)

它没有按预期返回行。

在本教程中,您学习了如何使用 Perl DBI 删除 MySQL 数据库表中的数据。

本教程有帮助吗?