事务
什么是事务?
手动提交事务
- 手动提交事务
- 自动提交事务
手动提交事务的sql语句
开启事务 start transaction;提交事务 commit;回滚事务 rollback;
手动提交事务使用过程:
自动提交事务
MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕 自动提交事务,MySQL 默认开始自动提交事务;
取消自动提交
![](https://i-blog.csdnimg.cn/blog_migrate/e636c0239a40bb82a6f8b3d52eed366f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/11f97b95c594f85123cab69c5f74e878.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d7febef6bb1e0cb84b63737d012e0f81.png)
事务原理
![](https://i-blog.csdnimg.cn/blog_migrate/a1b9cdd4115ab04541c223d5ab5cb34c.png)
事务的步骤:
- 客户端连接数据库服务器,创建连接时创建此用户临时日志文件
- 开启事务以后,所有的操作都会先写入到临时日志文件中
- 所有的查询操作从表中查询,但会经过日志文件加工后才返回
- 如果事务提交则将日志文件中的数据写到表中,否则清空日志文件。
回滚点
回滚点的操作语句
设置回滚点 savepoint 名字回到回滚点 rollback to 名字
注意事项:设置回滚点可以让我们在失败的时候回到回滚点,而不是回到事务开启的时候。
事务的四大特性 ACID
事务的隔离级别
MySQL 数据库有四种隔离级别
上面的级别最低,下面的级别最高。“是”表示会出现这种问题,“否”表示不会出现这种问题。
注意: 隔离级别越高,性能越差,安全性越高
MySQL 事务隔离级别相关的命令
select @@tx_isolation;
set global transaction isolation level 级别字符串
JDBC:Java database connectivity(Java数据库连接)
JDBC的本质
Java连接数据库
由数据库厂商提供的数据库jar包,实现了sun提供的接口的实现类
Java.sql.Driver 驱动接口------------>com.mysql.jdbc.Driver
java.sql.Connection 数据库连接接口--------->com.mysql.jdbc.ConnectionImpl
只需要导入数据库厂商提供的jar包
jar包的名字: mysql-connection-Java.版本号.jar
JDBC的操作步骤
1 导包
2 注册驱动 ------>Class.forName("com.mysql.jdbc.Driver");
3 获取数据库连接对象--------->(三个参数:协议,(jdbc:mysql://localhost:3306/库名)用户名,密码)
4 写sql语句------------>(DDL 创建表/ insert into/ update /delete from)
5 连接对象获取执行对象 ------->(Statement stmt=conn.createStatement();)
6 执行sql语句,----------> resultSet=stmt.excuteQuery(sql);
7 释放资源------>(conn.close(); stmt.close(); )
代码提现:
package com.qf.jdbc_01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
*
* jdbc原生操作步骤:7大步骤
* 1)导入驱动mysql的jar包
* 2)注册驱动
* 3)创建数据库的连接对象Connection
* 4)准备好sql
* 5)通过连接对象获取执行对象Statment
* 6)执行sql语句 (插入操作)
* 7)释放资源 (系统资源需要被释放的)
*/
public class JDBCDemo {
public static void main(String[] args) throws Exception {
//1)导入驱动mysql的jar包
//2)注册驱动
Class.forName("com.mysql.jdbc.Driver") ;
// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//3)创建数据库的连接对象Connection
//jdk提供的DriverManager:驱动管理类(管理jdbc的驱动的)
//public static Connection getConnection(String url,String user,String password)throws SQLException
//参数url: 统一资源定义符号 组成 协议:端口号:库名 --->jdbc:mysql://localhost:3306
//参数user: 登录msyql的用户名 root用户
//参数password:登录mysql的密码
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ee_2208_02",
"root",
"123456"
);
//4)准备好sql
String sql = "insert into account(name,balance) values('赵又廷2',2000) " ;
//5)通过连接对象获取执行对象Statment
//Statement createStatement()throws SQLException创建一个Statement对象,用于将SQL语句发送到数据库
Statement stmt = conn.createStatement();
//6)执行sql语句 (插入操作)
//Statement执行器里面---->
//int executeUpdate(String sql)throws SQLException 通用的执行通用添加,删除,修改
int count = stmt.executeUpdate(sql);
System.out.println("影响了"+count+"行") ;
//7)释放资源 (系统资源需要被释放的)
stmt.close();
conn.close();
}
}
package com.qf.jdbc_02;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
/**
* JDBC来操作DDL语句:创建表
* 使用JDBC来创建一个学生表,编号id,name姓名,age年龄,gender性别,address住址
*
*/
public class JdbcDemo2 {
public static void main(String[] args) throws Exception{
//7大步骤
//1)导包
//2)注册驱动
Class.forName("com.mysql.jdbc.Driver") ;
//3)获取数据库连接对象
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ee_2208_02",
"root",
"123456");
//4)准备sql
String sql = "create table student(" +
" id int primary key auto_increment," +
" name varchar(10)," +
" age int," +
" gender varchar(3)," +
" address varchar(20)" +
");" ;
//5)通过连接对象获取执行器
Statement stmt = conn.createStatement();
//6)执行sql语句 ----通用的更新操作:添加删除/修改, 或者ddl语句 "建表" ---int executeUpdate(String sql)
int count = stmt.executeUpdate(sql);
System.out.println(count);
//7)释放资源
stmt.close();
conn.close();
}
}
package com.qf.jdbc_02;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Jdbc操作DML语句
* 插入,insert
* 修改,update
* 删除,delete
*
* 加入异常处理----try...catch..finally...捕获异常
*/
public class JDBCDemo3 {
public static void main(String[] args) {
Connection conn = null ;
Statement stmt = null ;
try {
//1)导包
//2)注册驱动
Class.forName("com.mysql.jdbc.Driver") ;
//3)获取数据库连接对象
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ee_2208_02",
"root",
"123456"
);
//4)sql语句
//插入insert
/* String sql = "insert into student(name,age,gender,address) values('李帅',25,'男','西安市')," +
" ('高圆圆',28,'女','渭南市')," +
" ('赵又廷',30,'男','宝鸡市')," +
" ('王瑄',23,'男','南窑国际')" ;*/
//修改操作update
//String sql = "update student set name = '马蓉',age = 25,address='渭南市富平县' where id = 2" ;
//删除
String sql = "delete from student where id = 2 ;" ;
//5)通过连接对象获取执行器
stmt = conn.createStatement();