事物的特点:
原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。
隔离性(isolcation):一个事务处理对另一个事务处理的影响。
持续性(durability):事务处理的效果能够被永久保存下来 。
一个事务只会有一个结果:要么成功、要么失败。
sql事务代码:
START TRANSACTION;
UPDATE stud SET sname = '赵敏' WHERE sno = '1007';
DELETE FROM stud WHERE sno = '1010';
ROLLBACK / CIOMMIT;
Java实现数据库事务:
@Test
public void transaction() throws Exception{
//1、加载连接器(驱动)
Class.forName("com.mysql.jdbc.Driver");
//2、建立连接
String url = "jdbc:mysql://127.0.0.1:3306/mydata?characterEncoding=utf8&useSSL=true";
String user = "root";
String password = "1234";
Connection con = DriverManager.getConnection(url, user, password);
//3、获取语句对象
Statement st = con.createStatement();
try {
con.setAutoCommit(false); //设置自动提交属性为false,默认为true
//4、对数据库表进行操作(增删改查)
String sql = "INSERT INTO student(sno,sname,age,saddress) VALUES ('1012','小明',27,'益阳');";
st.execute(sql);
sql = "DELETE FROM student WHERE sno = '1012';";
st.execute(sql);
sql = "UPDATE student SET saddress = '中原' WHERE sname='杨过';";
st.execute(sql);
con.commit();
} catch (Exception e) {
con.rollback();
}finally{
con.setAutoCommit(true);//还原自动提交属性
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
事务隔离
read-uncommitted:当两个客户端分别开启事务时,设置隔离级别为read-uncommitted的客户端能实时查看另一个客户端的数据异动,即使另一个客户端事务还未最终提交(commit)。
read-committed:当两个客户端分别开启事务时,设置隔离级别为read-uncommitted的客户端能查看另一个客户端已提交(commit)的数据异动。
repeatable-read:这是客户端的默认隔离级别,当两个客户端分别开启事务时,只要本身事务没有最终完成,所看到的数据不会受其他事务的影响。
serializable:这是事务隔离的最高级别,在进行查询时就会对表或行加上共享锁,其他事务对该表将只能进行读操作,而不能进行写操作。
说到事务,提两个命令:
select @@tx_isolation; //查看当前客户端事务隔离级别:
set session transaction isolation level read uncommitted/read committed/repeatable read/serializable ;