mysql事务应用_(mysql)事务应用

(1)

事务的概念以及commit(),rollback()

数据库操作中,

一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,就必须撤消整个事务。我们通过提交commit()或是回滚rollback()来结束事务的操作。

(2)

从功能上划分,SQL语言可以分为DDL,DML和DCL三大类。

1. DDL(Data Definition Language)

数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 ;

CREATE---创建表

ALTER---修改表

DROP---删除表

2. DML(Data Manipulation Language)

数据操纵语言,SQL中处理数据等操作统称为数据操纵语言 ;

INSERT---数据的插入

DELETE---数据的删除

UPDATE---数据的修改

SELECT---数据的查询

3. DCL(Data Control Language)

数据控制语言,用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等;

GRANT---授权。

ROLLBACK---回滚

COMMIT---提交。

提交数据有三种类型:显式提交、隐式提交及自动提交。

1) 显式提交

用COMMIT命令直接完成的提交为显式提交。

2) 隐式提交

用SQL命令间接完成的提交为隐式提交。这些命令是:

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,

EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

3) 自动提交

若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。

所有的 DML 语句都是要显式提交的,也就是说要在执行完DML语句之后,执行 COMMIT 。而

其他的诸如 DDL 语句的,都是隐式提交的。也就是说,在运行那些非 DML 语句后,数据库已经进行了隐式提交,例如 CREATE TABLE,在运行脚本后,表已经建好了,并不在需要你再进行显式提交。

(3)

现实的应用:

在一个数据库操作的JAVA类中,如:DBDO.JAVA,一般会包括以下几种方法:

1)

获取具体数据库的连接;

2)

查询,插入,更新,删除等方法;

3)

事务的相应方法,如:

setAutoCommit(),commit(),rollback();getAutoCommit()方法.

这些方法,主要是对上面获取的connection对象的事务属性进行操作.

具体如下:

第一步:

假如系统获取的connection如下:

对应上面的1)

con=DriverManager.getConnection(url,username,password);

对应上面的2) :略

对应上面的3):

则这些事务方法的定义如下:

public void setAutoCommit(boolean auto){

try{

con.setAutoCommit(auto);

}

catch(SQLException sql){

logger.error(sql.getMessage());

sql.printStackTrace();

}

}

public void commit(){

try{

con.commit();

}

catch(SQLException sql){

logger.error(sql.getMessage());

sql.printStackTrace();

}

}

public void rollback(){

try{

con.rollback();

}

catch(SQLException sql){

logger.error(sql.getMessage());

sql.printStackTrace();

}

}

public boolean getAutoCommit(){

try{

return con.getAutoCommit();

}

catch(SQLException sql){

logger.error(sql.getMessage());

return false;

}

}

第二步:

现实应用时,如下:

若上面的数据库操作类的一个实例是dbOperator,则:

dbOperator.setAutoCommit(false);  -->先设置不自动提交

dbOperator.jInsert(Insertquery);  -->进行DB操作

-->根据所有SQL的操作结果,判断是用commit()还是rollback()

dbOperator.commit();

//dbOperator.rollback();

说明:1.当未提交时,插入,更新,删除的数据只可以在只次连接中看到(确实存在).重新连接mysql查看,则查看不到.2.在进行数据库操作时,常要用try..catch.若引入事务,则在catch中,要执行: con.rollback();-->才有实际意义.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值