There is an ongoing outage on the primary CPAN mirror. It is possible to work around the issue by using MetaCPAN as a mirror.

NAME

PDK::DBI::Mysql - MySQL 数据库操作类

SYNOPSIS

use PDK::DBI::Mysql;

my $db = PDK::DBI::Mysql->new(
    host     => '127.0.0.1',
    port     => 3306,
    dbname   => 'testdb',
    user     => 'root',
    password => 'secret',
);

# 插入数据
$db->insert('users', { name => 'alice', age => 20 });

# 查询数据
my $rows = $db->select(table => 'users')->all;

# 批量插入
my $params = [
    [1, 'bob'],
    [2, 'charlie'],
];
$db->batchExecute($params, 'INSERT INTO users(id, name) VALUES (?, ?)');

DESCRIPTION

该模块基于 DBIx::Custom 封装,继承 PDK::DBI::Role, 提供了 MySQL 数据库的连接、批量执行、事务管理等功能。

对常见的 insertupdatedeleteexecute 方法进行了事务封装, 执行成功后会自动提交,出错时自动回滚并抛出异常。

ATTRIBUTES

dsn

数据库连接字符串,例如:

DBI:mysql:database=test;host=localhost;port=3306
user

数据库用户名。

password

数据库密码。

host

主机名。如果未提供 dsn,可以通过 host/port/dbname 自动拼接。

port

端口号,默认 3306。

dbname

数据库名。

option

哈希引用,数据库连接选项。 默认值为:

{
    AutoCommit => 0,
    RaiseError => 1,
    PrintError => 0,
}
dbi

DBIx::Custom 对象。 提供 selectupdateinsertdeleteexecute 等方法的委托调用。

METHODS

clone()

克隆当前数据库对象,复制其连接参数,返回新对象。

batchExecute(\@params, $sql)

批量执行 SQL 语句。 内部调用 _rawExecute,适合大批量插入或复杂 SQL 的执行。

_rawExecute(\@params, $sql)

低层批量执行方法。 每 5000 条数据提交一次事务,循环结束后会提交剩余未提交的记录。

disconnect()

断开数据库连接。

reconnect()

重新建立数据库连接。 等价于先执行 disconnect,再调用内部的 _buildDbi

_buildDbi()

内部方法,用于构建 DBIx::Custom 对象。 会根据配置生成数据库连接,并应用默认或用户自定义的选项。 在 MySQL 下,标识符会使用反引号进行引用。

ERROR HANDLING

  • 所有数据库操作均在事务中执行,出错时会自动回滚。

  • 执行失败时,会抛出 Carp::croak 异常,并包含错误信息。

EXAMPLES

use PDK::DBI::Mysql;

my $db = PDK::DBI::Mysql->new(
    host     => '127.0.0.1',
    dbname   => 'testdb',
    user     => 'root',
    password => 'secret',
);

eval {
    $db->insert('users', { name => 'alice', age => 20 });
};
if ($@) {
    warn "数据库操作失败: $@";
}

AUTHOR

WENWU YAN <968828@gmail.com>

LICENSE AND COPYRIGHT

This software is licensed under the same terms as Perl itself.