mysql事务的四大特性与简单运用

package mysql;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Statement;

import org.junit.Test;

//事物特性ACID
//原子性,指事务中的操作要么都发生,要么都不发生
//一致性。指事务前后数据的完整性必须保持一致(甲乙2人总额2000元,甲转账乙100元后,转账后总额还是2000元)
//隔离性。多个事务并发访问数据库的时候,一个事务间的操作不能干扰其他事务,要相互隔离
//持久性:指事务一旦提交(commit),对数据库的改变是持久的,即使数据库故障也不应对数据有影响

//数据库的隔离级别Seraializable(串行化,最高级别,能处理各种问题,但数据库效率低下),repeated read,read commit,read uncommit

/*
create table account
(
	id int primary key auto_increment,
	name varchar(20),
	price int
);
/*
 * 事务,要么执行,要不执行
 * start transaction
  update account set price=price-100 where name=‘a‘;
  update account set price=price+100 where name=‘b‘;
 * sql2语句
 * commit(一定要执行commit才生效,不然回滚)
 */
public class 事务 {

	@Test
	public void test1() throws SQLException
	{
		Statement s=null;
		Connection con=DBHelper.getConnection();
		try{
		con.setAutoCommit(false);//不能一条一条执行sql
		String sql1="update account set price=price-100 where name=‘a‘";
		String sql2="update account set price=price+100 where name=‘b‘";
	    s=con.createStatement();
		s.executeUpdate(sql1);

		int i=8/0;  //这边有错,程序自动回滚

		s=con.createStatement();
		s.executeUpdate(sql2);

		con.commit();
		System.out.println("success....");
		}
		catch (Exception e) {
			con.rollback();//自动回滚
		}

	}

	@Test
	public void test2() throws SQLException  //手动回滚事务,假如第二条sql执行错误,程序回滚,让第一条sql正常插入数据库
	{
		Statement s=null;
		Connection con=DBHelper.getConnection();
		Savepoint p=null;
		try{
		con.setAutoCommit(false);//不能一条一条执行sql
		String sql1="update account set price=price-100 where name=‘a‘";
		String sql2="update account set price=price+100 where name=‘b‘";
		String sql3="update account set price=price+100 where name=‘c‘";
	    s=con.createStatement();
		s.executeUpdate(sql1);

		 p=con.setSavepoint(); //保存点

		 int i=12/0;  //这边出错了,上一条依然插入数据库

		s=con.createStatement();
		s.executeUpdate(sql2);

		s=con.createStatement();
		s.executeUpdate(sql3);

		con.commit();
		System.out.println("success....");
		}
		catch (Exception e) {

			con.rollback(p); //回滚到第一个,第一个要执行
			con.commit();   //手动回滚一定要提交
		}
	}
}

  

时间: 2024-10-16 00:23:04

mysql事务的四大特性与简单运用的相关文章

数据库事务的四大特性以及事务的隔离级别(mysql)

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执

你可能知道事务的四大特性,但是你不一定知道事务的实现原理

说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景: 面试官:"事务的四大特性是什么?" 我:"ACID,即原子性(Atomicity).隔离性(Isolation).持久性(Durability).一致性(Consistency)!" 面试官:"在 MySQL 数据库的 InnoDB 引擎是怎么实现这四大特性的?" 我:"这个...这个....,还真没有了解过哎" 面试官:"那我们就先这

数据库事务的四大特性ACID

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,所以事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响.为了实现原子性,需要通过日志:将所有对数据的更新操作都写入日志,如果一个事务中的一部分操作已经成功,但以后的操作,由于断电/系统崩溃/其它的软硬件错误而无法继续,则通过

数据库事务的四大特性以及事务的隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执

数据库事务的四大特性及事务隔离级别

摘自:http://www.cnblogs.com/fjdingsd/p/5273008.html 本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consi

黑马day11 事务的四大特性

1.事务的四大特性:一个事务具有的最基本的特性,一个设计良好的数据库可以为我们保证这四大特性. 1.1原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生. 1.2一致性:如果事务执行之前数据库是一个完整性的状态,那么事务结束后,无论事务是否执行成功,数据库仍然是一个完整性状态. 数据库的完整性状态:当一个数据库中的所有的数据都符合数据库中所定义的所有的约束,此时可以称数据库是一个完整性状态. 1.3隔离性:事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不

数据库事务的四大特性以及事务的隔离级别详解

作者 : fjdingsd 来源 : 博客园 本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性

事务的四大特性(ACID)

事务的四大特性(ACID) 1.原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性. 2.一致性(consistency):数据库总数从一个一致性的状态转换到另一个一致性的状态. 3.隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的. 4.持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据

数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执