MySQL 事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在新闻系统中,你删除一个分类,也要删除和该分类相关的信息,如新闻,评论等等,如果其中一个语句出错,那么数据就不完整了,这些数据库操作语句就看成一个整体,必须全部成功,这样就构成一个事务!
1、在MySQL中只有使用了Innodb数据库引擎的数据表才支持事务
2、事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
3、事务用来管理insert,update,delete语句
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性:一组事务,要么成功;要么撤回。
2、稳定性:有非法数据,事务撤回。
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。但可靠性和高速度不可兼得。
开启事务关键字
begin
#数据库操作语句...
如果有一条操作语句失败,撤回之前的数据库操作
ROLLBACK
sql操作都成功,提交事务,保存数据
COMMIT
案例:创建test数据库,user表(id,username),表类型InnoDB,编码utf8
<?php
$handler = @mysql_connect("localhost", "root", "");
mysql_select_db("test");
mysql_query("SET AUTOCOMMIT=0"); //设置为不自动提交,因为MYSQL默认立即执行
mysql_query("BEGIN"); //开始事务定义
if (!mysql_query("insert into user (username) values('zhangsan')")) {
mysql_query("ROLLBACK"); //判断当执行失败时回滚
echo 1;
}
if (!mysql_query("insert into user (username) values('lisi')")) {
mysql_query("ROLLBACK"); //判断执行失败回滚
echo 2;
}
mysql_query("COMMIT"); //执行事务
echo 3;
mysql_close($handler);
?>
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在新闻系统中,你删除一个分类,也要删除和该分类相关的信息,如新闻,评论等等,如果其中一个语句出错,那么数据就不完整了,这些数据库操作语句就看成一个整体,必须全部成功,这样就构成一个事务!
1、在MySQL中只有使用了Innodb数据库引擎的数据表才支持事务
2、事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
3、事务用来管理insert,update,delete语句
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性:一组事务,要么成功;要么撤回。
2、稳定性:有非法数据,事务撤回。
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。但可靠性和高速度不可兼得。
开启事务关键字
begin
#数据库操作语句...
如果有一条操作语句失败,撤回之前的数据库操作
ROLLBACK
sql操作都成功,提交事务,保存数据
COMMIT
案例:创建test数据库,user表(id,username),表类型InnoDB,编码utf8
<?php
$handler = @mysql_connect("localhost", "root", "");
mysql_select_db("test");
mysql_query("SET AUTOCOMMIT=0"); //设置为不自动提交,因为MYSQL默认立即执行
mysql_query("BEGIN"); //开始事务定义
if (!mysql_query("insert into user (username) values('zhangsan')")) {
mysql_query("ROLLBACK"); //判断当执行失败时回滚
echo 1;
}
if (!mysql_query("insert into user (username) values('lisi')")) {
mysql_query("ROLLBACK"); //判断执行失败回滚
echo 2;
}
mysql_query("COMMIT"); //执行事务
echo 3;
mysql_close($handler);
?>