MySQL 事务

事务

1.事务的基本介绍:

​ 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败

案例:张三向李四转账

SQL语句:

-- 0.开始事务
START TRANSACTION;
--  张三账户 -500
UPDATE bank SET money = money - 500 WHERE id = '1'; 
 -- 李四账户 +500
update bank SET money = money + 500 WHERE id = '2'         
-- 出错了
-- 发现没有问题,提交事务
commit;
-- 发现出问题了,回滚事务
rollback;

MySQL数据库中事务默认自动提交

事务提交的两种方式:

1、自动提交:mysql就是自动提交的

​ 一条DML(增删改)语句会自动提交一次事务

2、手动提交:Oracle 数据库默认是手动提交事务

​ 需要先开启事务,再提交

修改事务的默认提交方式:

​ 查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交 0 代表手动提交

​ 修改默认提交方式:set @@autocommit = 0;

操作:1、开启事务:start transaction;

​ 2、回滚:rollback;

​ 3、提交:commit;

事务的四大特征:

原子性:

持久性:

一致性:

隔离性:

事务的隔离级别(了解)

SQL分类:

DDL:操作数据库和表

DML:增删改表中的数据

DQL:查询表中的数据

DCL:管理用户,授权

DCL:管理用户,授权

1.管理用户

添加用户: create user '用户名'@'主机名' IDENTIFIED by '密码';

删除用户:drop user '用户名'@'主机名';

修改用户密码:UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名';

SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

mysql中忘记了root用户的密码?

1、cmd --> net stop mysql 停止mysql服务(需要管理员运行该cmd)

2、使用无验证方式启动mysql服务:mysqld --skip-grant-tables

3、打开新的cmd窗口,直接输入mysql命令,敲回车,就可以登录成功。

4、use mysql;

5、update user set password = password('你的新密码') where user = 'root';

6、关闭两个窗口

7、打开任务管理器,手动结束mysqld.exe的进程

8、启动mysql服务

9、使用新密码登录

查询用户:

1.切换到mysql数据库

2.查询user表

%:通配符%:表示可以在任意主机使用用户登录数据库

2 授权

事务之JAVA代码的写法:

1、关闭自动提交
2、遇到异常就回滚
3、没有异常,提交事务

例子:张三香李四转500元

Connection con = DBUtil.getConnection();//获得数据库的连接
        try {
            con.setAutoCommit(false);//关闭自动提交
            Statement stmt = con.createStatement();//创建命令
            stmt.executeUpdate("UPDATE bank set money = money - 500 WHERE id = 1");//账户-500
            int i = 5/0;//除数不能为0,发生异常
            stmt.executeUpdate("UPDATE bank set money = money + 500 WHERE id = 2");//账户+500
            con.commit();//提交事务
        } catch (SQLException e) {
            e.printStackTrace();
        }catch  (Exception e){
            try {
                con.rollback();//事务回滚
            } catch (SQLException ee) {
                System.out.println("事务回滚时发生异常");
                ee.printStackTrace();
            }
            e.printStackTrace();
        }
上一篇:事务


下一篇:阿里官推2021年最新500道Java后端面试大全(码了)