(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();-->才有实际意义.   

你可能感兴趣的:(mysql,数据库,职场,休闲)