专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Mysql基础-事务隔离级别

背大家都会背

谈到事务隔离级别,背基本是人人都会背的。无非就是读未提交,读已提交,可重复读,串行化等等。。。但是就算背上了,就真的理解的事务的特性了么。

前两天在和同事讨论的时候,他问了我一个这样的问题。多个事务,同时执行 set a = a-1 where a = 1 这个逻辑的时候,有没有可能导致 a 会小于0? 说实话,我还是挺惊讶一个工作两三年的开发,居然会问出这种问题。然后前两天在脉脉上也看到了类似的讨论,居然一大群人还分析的头头是道。。。

能写个demo测试一下就搞定的事情,为什么非要用嘴巴争呢。

事务隔离的特性

数据库有增删改查四种操作,进一步总结一下,就只有 ‘读’ 和 ‘写’ 两种操作而已。关于读操作,就是大家都会背的那四种隔离级别。那关于写操作呢?其实你没有听过任何关于写操作的隔离级别是有原因的,那就是:写本身就是串行化的操作!

一般情况下,mysql是以行锁来控制事务的行为的。也就是当你试图修改一行数据的时候,如果有其它事务修改了这行数据,但是还未提交的话,你的修改会一直阻塞在这里,直到先前的事务提交。这就是写操作的串行化!

最后,代码都准备好了,拿回去试试吧,能动手多动手,不要纸上谈兵。

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url,username,password);
        connection.setAutoCommit(false);
        connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

        String update = "update tb_liuyu set address = 'beijin' where id = 1";

        PreparedStatement preparedStatement = connection.prepareStatement(update);
        preparedStatement.execute();

        System.out.println("update count is :"+preparedStatement.getUpdateCount());

        connection.commit();
    }

文章永久链接:https://tech.souyunku.com/19217

未经允许不得转载:搜云库技术团队 » Mysql基础-事务隔离级别

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们