mysql 事务块 sql_MySQL 事务预编译查询和Perl DBI简化总结

今天由小编为大家讲解有关语言编程的文章,相信对大家一定有很大的帮助

c语言编程入门许多WEB应用程序内部通常重复运行带不同自变量的相同查询,或以全有或全无块的形式执行一组相关查询。要满足这些要求,大多数数据库系统(包括)支持预编译查询与事务,多数脚本语言(如和Perl)也拥有内置函数访问这些数据库特性。然而,上述两项特性是MySQL的新功能,因此给那些以前没有见过它们的开发者制造了一些麻烦。

本文旨在解决这一问题。文章讨论了支持MySQL事务和预编译查询的Perl DBI函数,并对其工作原理和应用方法进行说明。

预编译查询

在数据库中执行批量上传时,我们经常见到这样的SQL查询,这些查询仅在提交给INSERT命令的参数上有所不同。在这些情况下,应用所谓的预编译查询是一种常用的优化方法,它为查询建立一个模板,然后再向模板中导入不同的必要值,从而减少了数据库消耗。如果使用得当,这个特性能够显著提高应用程序的性能。

为说明这一点,我们以一个二域表格为例,如下面的列表A所示:

以下为引用的内容:

mysql> SELECT * FROM users;

+-------+--------+

| fname | lname|

+----------------+

| Joe| Blow|

+-------+--------+

1 row in set (0.09 sec)

列表A

现在,假设我需要通过INSERT查询向这个表格中输入一组新记录。很明显,每次运行时,查询的格式保持不变,只有输入的值发生变化。要完成这一操作,最佳方法是为INSERT查询建立一个内置DBI“占位符”的模板,然后在每次运行时用实际值来代替占位符。如列表B所示:

以下为引用的内容:

#!/usr/bin/perl

use DBI;

# create database connection

my $dbh = DBI->connect("DBI:mysql:database=somedb;

host=localhost", "user", "pass", {'RaiseError' => 1});

# prepare template query

my $sth = $dbh->prepare

("INSERT INTO users (fname, lname) VALUES (?, ?)");

# execute query with first set of parameters

$sth->execute('John', 'Doe');

# execute query with second set of parameters

$sth->execute('Jane', 'Low');

# close connection

$dbh->disconnect();

列表B

建立并执行一个带Perl DBI预编译SQL查询共分四个简单的步骤:

首先调用connect()方法初始化一个数据库句柄。这个方法以一个字符串为连接参数,这个字符串中包括数据库类型(”mysql”)、主机名称(”localhost”)和数据库名称(”somedb”);并向connect()方法提供用户名(”user”)和密码(”pass”)作为第二和第三自变量。

调用prepare()函数建立SQL查询模板。prepare()中用到的问号为代替实际值的占位符。

调用execute()方法向查询预编译模板中输入实际数据值,把它提交给占位符代替的自变量。注意,这里自变量的顺序十分重要,在上一步中必须为每个占位符定义一个自变量。每次通过一组不同的自变量调用execute()方法,就用相应的值执行一次INSERT查询。

调用disconnect()方法结束会话。

从一个外部文件中批量插入数据,是上述查询的典型应用。这时,首先调用prepare()方法,然后应用一个循环从文件中读入数据,每运行一次循环,即调用execute()方法在数据库中插入一组值。

事务

事务支持是MySQL的另外一项重要的新特性。简单来说,事务就是一个以全有或全无方式执行的SQL语句块(因为这些语句彼此相互依赖)。事务中的所有语句必须全部成功执行,事务才能成功完成;如果有任何一个语句出现错误,系统就会“退回”到原始状态,以避免数据连接/破坏问题。

在两个银行账户间转账就是一个典型的例子。在数据库中,转账过程包括二个步骤:首先,从源账户余额中提取转账金额,然后将其存入目标账户的余额中。如果第二步发生错误,那么第一步必须倒退到一个前面的“快照”,以避免余额失衡。大部分数据库(包括MySQL)通过一组命令完成这种转账过程。

START TRANSACTION命令标记一个新事务块开始,接着执行一系列SQL命令。

COMMIT命令标记一个事务块结束,表示在事务中发生的所有变化应被“提交”或永久化。

ROLLBACK命令标记一个事务块结束,并表示事务中发生的所有变化必须被撤销。

C语言视频教程为说明它的实际应用,我们以一个存储用户账户的表格为例,如列表C所示:

首先将需要备份的网站文件前的复选框选中,然后点击“添加到压缩文件”超连接,接着在弹出的对话框中输入文件名称,注意一定要输入以zip为后缀的压缩文件格式。确定后稍等片刻,一个文件压缩包就制作完成了。只需要将其下载,放置在安全的地方保存就可以了。

在管理器主页面的功能菜单中选择“上传文件”按钮,将在网页最下方打开文件上传模块(如图2),点击“浏览”按钮选择本地文件,然后再点击上传即可。程序中的文件容量栏目会自动显示该文件占用网站空间的大小,文件大小会以KB或Byte两种单位显示。我们可以根据此功能方便的对网站文件进行整理归类操作;点击下载超连接可以将网站文件下载到本地硬盘,操作方式与普通下载方式无异,还可以使用迅雷等下载工具进行文件的高速下载;软件还提供了功能强大的编辑器(如图3),点击编辑连接后会显示文件的源代码,它还提供了本地预览与在线预览的功能,使网站文件的调试工作变得非常简单高效;

文件管理器程序可以进行几乎所有的文件管理操作。它不仅具备一般的上传、下载、新建、重命名文件等功能,还提供了诸多实用的其它功能,根据这些实用功能,我们可以完成对网站的管理维护等相关操作。

以下为引用的内容:

mysql> SELECT * FROM accounts;

+----+------------+---------+

| id | label| balance |

+----+------------+---------+

|1 | Savings #1 |1000 |

|2 | Current #1 |2000 |

|3 | Current #2 |3000 |

+----+------------+---------+

3 rows in set (0.34 sec)

列表C

现在,假设我要转账400美元。实际的“事务”通过两个UPDATE语句来执行,一个语句将转账金额从源账户中取出,另一语句将其存入目标账户。如果我只是在账户间进行转账,那么整个过程中,所有账户的总余额(00)应一直保持不变。以下是完成转账的DBI代码(列表D):

以下为引用的内容:

#!/usr/bin/perl

use DBI;

# create database connection

my $dbh = DBI->connect

("DBI:mysql:database=somedb;host=localhost",

"user", "pass", {'RaiseError' => 1, 'AutoCommit' => 0});

# trap errors using eval{}

eval {

# debit account #1

$dbh->do("UPDATE accounts SET balance = balance-400 WHERE id=1");

# credit account #2

$dbh->do("UPDATE accounts SET balance = balance+400 WHERE id=2");

# no errors so far

# commit changes

$dbh->commit();

};

# any errors

# rollback

if ($@) {

print "Transaction aborted: $@";

$dbh->rollback();

}

# close connection

$dbh->disconnect();

3b30d3ccd7053d5d0d0603977cf6a353.png

列表D

C语言教程在Perl中执行一个事务共有四个基本步骤:

第一步,关闭数据库“自动提交”。(本质上说,自动提交意味着系统保存你所做的变化。)这一步很重要,因为你只应在确定所有的事务“单元”成功完成后,才保存发生的变化。在上面的例子中,我们在调用connect()方法时将AutoCommit选项设为0,完成关闭操作。

下一步,以普通方式执行INSERT、UPDATE和/或DELETE查询,但将这些查询包含在一个eval{}块中。这样做是为了保证:如果发生错误,程序会在块以外中断,事务就不会被提交。如果一切正常,发生的变化将在事务块中的所有查询执行后,通过调用commit()提交给数据库。

如果在执行事务块中任何一个语句时出现错误,程序将在eval{}块外中断,并继续执行后面的代码。这些代码首先打印一段错误信息,然后通过rollback()函数将数据库退回到事务前的状态。注意,一旦调用这个函数,事务即无法逆转。

调用disconnect()方法结束会话。

如你所见,用Perl和MySQL执行事务模型能够使MySQL数据库在遇到查询执行错误时更加稳定。但是,在新开始着手用这些新特性重写代码前,必须注意,它们实际上增加了系统的性能消耗;因此,在执行它们之前,最好进行一下成本效益分析。

看完小编的文章是不是很精彩,更多关于在线教育的文章尽在课课家,希望你们多多关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 5.7是一个流行的关系型数据库管理系统,而Perl是一种功能强大的编程语言。这两者可以搭配使用,来实现对MySQL数据库的访问和操作。 MySQL 5.7提供了一系列的API和驱动程序,允许开发者使用Perl编写的应用程序与数据库进行通信。通过Perl语言可以方便地连接到MySQL数据库,并可以执行各种常见的数据库操作,如查询、插入、更新和删除数据。 在Perl中使用MySQL 5.7,需要使用DBI模块,它是Perl操作数据库的标准接口。通过DBI模块,可以连接到MySQL数据库,并执行各种SQL语句。可以使用DBI的prepare和execute方法来编译和执行SQL语句,还可以使用fetchrow_array方法获取查询结果。 PerlMySQL的搭配使用,可以实现各种功能,从简单的查询和更新到复杂的数据处理和报表生成。例如,可以使用Perl编写脚本来读取数据库中的数据,并进行数据分析和处理,也可以将数据导出到其他格式的文件中。 此外,MySQL 5.7和Perl的兼容性良好,可以在Windows、Linux和Mac等操作系统上使用。而且,MySQL 5.7的官方文档提供了丰富的Perl示例代码和教程,方便开发者学习和使用。 总结来说,MySQL 5.7和Perl是很好的组合,通过Perl可以方便地在应用程序中访问和操作MySQL数据库,并且兼容性好,使用灵活。 ### 回答2: MySQL 5.7是一种关系型数据库管理系统,它是由Oracle公司开发和支持的。它具有很多功能和优点,比如可扩展性高、事务支持和丰富的数据类型。Perl是一种通用的脚本语言,它在文本处理方面表现出色,被广泛用于开发Web应用程序和系统管理任务。 MySQL 5.7和Perl可以相互配合使用,以实现各种数据处理和管理任务。Perl提供了很多开发MySQL应用程序所需的模块和工具,可以轻松地连接MySQL数据库,执行查询和操作数据。通过Perl,我们可以编写复杂的脚本来处理和分析大量数据,快速地生成报告和统计信息。 在使用MySQL 5.7和Perl开发应用程序时,我们可以使用Perl提供的数据库模块(比如DBI和DBD::mysql)来连接和操作MySQL数据库。通过这些模块,我们可以轻松地执行SQL查询、插入、更新和删除数据。此外,Perl还提供了很多其他的模块和函数,可以帮助我们更好地管理和处理数据库。 总的来说,MySQL 5.7和Perl是一对强大的组合,可以用于开发各种类型的应用程序和处理数据。无论是在Web开发领域还是在系统管理任务中,它们都展现出了卓越的性能和灵活性。通过结合二者的优势,我们可以轻松地处理和管理大量的数据,实现高效的数据库操作和数据分析。 ### 回答3: MySQL 5.7是一种流行的开源关系型数据库管理系统,它由Oracle开发和维护。它提供了一个稳定、可靠和高效的解决方案,可用于存储和管理大量数据。MySQL 5.7支持多种操作系统,包括Linux、Windows和Mac OS。 Perl是一种功能强大的解释型编程语言,它被广泛用于开发各种类型的应用程序,包括Web开发、系统管理、数据库操作等。Perl语言具有强大的正则表达式功能和灵活的文本处理能力,这使得它成为处理大量数据的理想选择。 MySQL 5.7和Perl可以很好地搭配使用,以满足各种数据库操作需求。Perl提供了一些MySQL相关的模块,如DBI(Database Interface)和DBD(Database Driver),可以方便地连接、查询和处理MySQL数据库。 使用Perl连接MySQL数据库非常简单。首先,我们需要安装相关的Perl模块,如DBI和DBD::mysql。然后,我们可以使用DBI模块提供的接口,通过指定数据库的连接参数来连接到MySQL数据库。一旦连接成功,就可以使用Perl编写SQL查询语句,并使用DBI模块提供的方法执行查询操作。查询结果可以以数组或哈希的形式返回,方便我们进行后续处理。 除了基本的查询操作,Perl还可以通过DBI模块提供的接口执行其他数据库操作,如插入数据、更新数据和删除数据等。我们可以使用Perl的循环和条件语句结合MySQL的语法来实现复杂的数据库操作。此外,Perl还支持事务处理,可以确保在多个数据库操作中的一致性。 综上所述,MySQL 5.7和Perl是一对强大的组合,可以实现各种复杂的数据库操作。无论是开发Web应用、系统管理还是处理大量数据,MySQL 5.7和Perl都能提供高效、稳定和灵活的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值