你还在装 發表於 2023-7-14 00:00:00

关于navicat事务自动提交问题

<p>
        最近在使用navicat编辑数据库表的时候遇到了一些问题,记录下~~<br>
        问题:编辑完数据之后点击“✔”提交的时候navicat卡了,然后提示“mysql lock wait timeout exceeded”,截图现在没有了,总之意思就是超时了。</p>
<p>
        原因:后来查了好多资料,原来是navicat的自动提交事务关闭了,导致了修改数据之后事务一直未提交,所以再修改数据的时候就得等之前的事务,但是事务一直未提交,所以就超时了</p>
<p>
        解决原因:可以先看一下事务是否是自动提交的。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_178757">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql plain">show variables </code><code class="sql color1">like</code> <code class="sql plain">'autocommit</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        <img title="关于navicat事务自动提交问题" alt="关于navicat事务自动提交问题" src="https://zhuji.jb51.net/uploads/img/202305/24525a09235c27c1aa96e53f2958849d.jpg"></p>
<p>
        如图,如果查出来是on,表明事务是自动提交的,修改数据之后不用自己提交。如果是off的话,就需要把自动提交先先打开了。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_164108">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql keyword">set</code> <code class="sql plain">autocommit=</code><code class="sql keyword">on</code><code class="sql plain">;</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        这样的话再修改数据的时候就不出出现超时的问题了~~~</p>
<p>
        <strong>ps:下面看下navicat premium 设置update和delete操作不自动提交事务的问题</strong></p>
<p>
        首先查看mysql设置:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_459442">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql plain">show variables </code><code class="sql color1">like</code> <code class="sql string">'autocommit'</code><code class="sql plain">;</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
        结果应为:</p>
<p>
        <img title="关于navicat事务自动提交问题" alt="关于navicat事务自动提交问题" src="https://zhuji.jb51.net/uploads/img/202305/38df470eee6f125e878569bc1d905e9f.jpg"></p>
<p>
        然后执行:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_739701">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql keyword">set</code> <code class="sql plain">autocommit = 0;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql keyword">delete</code> <code class="sql keyword">from</code> <code class="sql plain">table1 </code><code class="sql keyword">where</code> <code class="sql plain">id =xxx;</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql keyword">commit</code><code class="sql plain">; </code><code class="sql color1">or</code> <code class="sql keyword">rollback</code><code class="sql plain">;</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
</div>
<p>
         </p>
<p>
        这时再查询:show variables like ‘autocommit'; 其结果应为:</p>
<p>
        <img title="关于navicat事务自动提交问题" alt="关于navicat事务自动提交问题" src="https://zhuji.jb51.net/uploads/img/202305/2d13a54d20a0317c8d165be100d97606.jpg"></p>
<p>
        需要注意:这种操作设置,在当前查询窗口有效,重新打开navicat或者新建查询页都需要重新设置。</p>
<p>
        到此这篇关于navicat事务自动提交问题的文章就介绍到这了,更多相关navicat事务自动提交内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!</p>
<p>
        原文链接:https://blog.csdn.net/yeshenyuexieriji/article/details/105367630</p>
頁: [1]
查看完整版本: 关于navicat事务自动提交问题