InnoDB
一般来说,MySQL有以下几种引擎:ISAM、MyISAM、HEAP、InnoDB和Berkley(BDB)。注意:不同的版本支持的引擎是有差异的。
事务处理在各种管理系统中都有着广泛的应用,
如果没有事务处理,在你的增删改的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要rollback就可以取消删除操作(其实是只要你没有commit你就没有确实的执行该删除操作) 一般来说,在商务级的应用中,都必须考虑事务处理的!
MYSQL数据库从4.1就开始支持事务功能,5.0引入存储过程
事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!购物时,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
注意:第二种方法当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,
直到你用commit确认或rollback结束,当你结束这个事务的同时也开启了个新的事务。
第一种方法只将当前的作为一个事务!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
java操作事务:
package com.yw.transaction.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test {
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) {
Connection c=null;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String url="jdbc:mysql://127.0.0.1:3306/ywdb";
String username="root";
String password="root";
try {
c=DriverManager.getConnection(url,username,password);
c.setAutoCommit(false);
String sql="insert into accountA values(200)";
PreparedStatement ps=c.prepareStatement(sql);
ps.executeUpdate();
//int a=3/0;
c.commit();
} catch (SQLException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
try {
c.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}