gpt4 book ai didi

python - 事务甚至在 SELECT 上开始吗?

转载 作者:可可西里 更新时间:2023-11-01 07:05:36 26 4
gpt4 key购买 nike

我在 docs 中读到:

...since transactions start when a cursor execute a query, but end when COMMIT or ROLLBACK is executed by the Connection object.

import MySQLdb

db = MySQLdb.connect(user="root", db="test")
c = db.cursor()
c.execute("SELECT * FROM books")
print c.fetchall()

我怀疑 MySQLdb 即使在不修改数据的查询(如 SELECT)上也会启动事务,因为很难知道查询是否只读取数据而不写入数据。

  1. 这是真的吗?
  2. 如果是这样,这意味着我应该在每次查询后执行 cursor.commit(),以确保没有表被锁定?
  3. 其他我不知道的问题?

谢谢

最佳答案

是的,SELECT 语句与其他语句一样,因此事务开始。

如果你想避免这种情况,你可以这样做:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM books ;
COMMIT ;

详细说明:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;

表示以下指令可以读取已修改但尚未收到 COMMIT 的行。那种交易没有获得独占锁。

第二部分 SELECT * FROM books ; 显然是一个 SQL 语句 第三部分 COMMIT ; 结束事务并使它“永恒的”。在那种情况下,没有写入完成,因此 COMMIT 仅用于结束事务和

关于python - 事务甚至在 SELECT 上开始吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8831936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com