JDBC 三大范式 事务 sql注入 mysqldump备份

一、事务

什么是事务?
每条sql语句都是一个事务。
事务只对DML语句有效,对于DQL语句无效。
假设该操作有4个步骤。A、B、C、D,若ABCD四个步骤都成功完成,则认为事务成功;
若ABCD四个步骤中任意一个步骤失败,则认为事务失败。
  • 事务的四大特性(ACID)
    (1) 原子性-Atomicity
    事务包含的所有操作,要么全部成功,要么全部失败回滚。
    (2)一致性-Consistency
    一致性是指事务必须使数据库从一个一致性状态转换到另外一个一致性状态,也就是说一个事务必须使数据库执行之前和执行之后都处于一致性状态。
    让数据保持一定的合理性。
    比如:一个商品出库时,仓库数量减一,购物车数量加一。
    (3)隔离性-Isolation
    隔离性是指当多个用户访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务直接要相互隔离。多个事务同时操作一张数据表,事务之间一个互相隔离,不互相影响。
    即要达到这么一种效果:对于任意并发的两个事务T1和T2,在事务T1看来,T2要么在T1开始之前就结束,要么在T1结束之前才开始,这样两个事务就感觉不到有其他事务在并发进行。
    (4)持久性-Durability
    事务一旦提交,就没有办法更改,被永久记录在数据库中。
  1. 事务的开启:start transaction; 事务的开启具有隔离性,也就是当事务还没有提交的时候,其他用户访问到的数据库的数据没有发生改变;
    在这里插入图片描述

  2. 事务的提交:commit; 当事务提交了之后,里面的数据就发生了改变,此时其他用户访问数据库的时候,就可以访问到被改变的数据库的数据了。
    在这里插入图片描述

  3. 事务的回滚:rollback;
    比如说在银行转账的过程中有两步,1.从你的账户扣钱 2. 收钱用户的账户加钱。例如当把你的钱扣了,但是给别人还没有把钱转过去,服务器就断电了,那么此时,就会rollback,你的钱虽然在过程被扣了,但是因为整个事务没有执行完毕,所以你的钱就会回来的。
    在这里插入图片描述

  4. 一般情况下,rollback 和 commit只出现其一。

  5. 事务并发操作
    (1)脏读:比如,一个员工的工资是3.6万一个月,老板发工资的时候不小心按错了,按成了3.9万,这时员工查看他的工资比之前多了3千,高兴坏了,此时,老板发现他把工资发错了,就rollback了一下,结果,员工查看他的工资又成了3.6万,空欢喜一场。
    (2)不可重复读:比如:当一位男士卡里面有3.6万,他准备去买一个空调和洗衣机,就在这时,他的妻子拿他的卡去刷了一个包包,并提交。此时这位男士在付款的时候,服务员告诉他卡里没有钱了,他就很纳闷。

  6. 事务的隔离级别
    (1)Read uncommitted 就是一个事务可以读取到另外一个未提交的事务;
    (2) Read commit 一个事务只能读取到另外一个事务提交后的结果;
    (3)Repeatable read 当一个事务在执行时,不允许其他事务来抢占资源;
    (4)Serializable

  7. 查看隔离级别:select @@global.tx_isolation,@@tx_isolation;
    在这里插入图片描述

  8. 设置隔离级别:set global transaction isolation level read committed;
    在这里插入图片描述

二、JDBC的步骤

JDBCUtils 是一个工具类,用于加载数据库,连接数据库,关闭资源。

import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
   
    private static String driver = null;
    private static String username = null;
    private static String password = null;
    private static String url = null;
    static {
   

        try {
   
            InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            properties.load(in
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值