一、MySQL中的事务是什么?
事务:多个sql语句的集合。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。(来自菜鸟教程)
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。(来自菜鸟教程)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。(来自菜鸟教程)。
说明:
begin:开启事务,执行的所有sql都是一个事务直到执行commit或者rollback事务就结束。
rollback:回滚
commit:提交
二、用Java写的小demo:
package com.test;
import java.sql.DriverManager;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
public class Test {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String USER = "root";
private static final String PASSWORD = "123";
private static final String URL = "jdbc:mysql://localhost:3306/数据库名";
public static void main(String[] args) throws ClassNotFoundException, SQLException{
Class.forName(DRIVER);
Connection connection;
PreparedStatement preparedStatement = null;
connection = (Connection) DriverManager.getConnection(URL,USER,PASSWORD);
try {
connection.setAutoCommit(false);//关闭自动提交事务(默认开启)
/**
* 添加班级信息
*/
String sql = "insert into className values(1,'语文班')";
preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
preparedStatement.executeUpdate();
/**
* 添加学生信息
*/
sql = "insert into student values(1,'小明',18,1)";
preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
preparedStatement.executeUpdate();
connection.commit();//如果没有异常就提交
System.out.println("正常提交");
} catch (SQLException e) {
connection.rollback();//如果有异常就回滚
System.out.println("有异常,执行回滚");
}finally {
preparedStatement.close();
connection.close();
}
}
}
说明:
以上面例子为例,如果添加班级信息或添加学生信息有一个出现异常,事务都将回滚,有正确的添加信息语句的执行,信息也不会添加到数据库表中。反之,如果不使用事务管理,添加班级信息或添加学生信息有一个出现异常,那么没出现异常的那个sql会将信息添加到数据库表中。