Django 事务锁定表

Posted

技术标签:

【中文标题】Django 事务锁定表【英文标题】:Django transactions locking tables 【发布时间】:2011-06-07 23:26:15 【问题描述】:

不幸的是,我需要更新、添加和删除 auth.models.User 表中的行...

当我这样做时,表会锁定,我无法对表执行任何 SELECT 查询。


我用@transaction.commit_manually 包围了这些查询,这可能与表锁定有关。

事务如下所示:

for row in csv_reader:

    update_sql = "UPDATE auth_user SET last_name = '%s' WHERE username = '%s'" %(row[2], row[0] )
    cursor.execute(update_sql)
    if not index % 100: print index:
        print index
        transaction.commit()

另外我正在使用 Sql Server 2008,我想知道它是否是特定于 Sql Server 的,或者这样的操作也会锁定 PostgreSQL 和 mysql 中的表。


有什么想法吗? :)

【问题讨论】:

【参考方案1】:

是的,您是故意锁定表格的。我建议学习transaction isolation,因为它是数据库的核心概念之一。

至于你的问题,你可以对 UPDATE 和 SELECT 语句做几件事:

您可以 SET the transaction isolation level 为数据库连接的其余部分设置更低的值。 您也可以对 other mechanisms 做同样的事情。 您可以尝试重新排列查询,以便首先读取基础数据,然后开始修改数据。这可能允许您锁定表,但允许操作继续进行。 您可以再次考虑哪些查询对于事务处理很重要。 您还可以使用Locking Hints 引导SQL Server。

【讨论】:

以上是关于Django 事务锁定表的主要内容,如果未能解决你的问题,请参考以下文章

论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务

MySQL:事务与锁定表

14.Mysql事务控制和锁定

SQL Server:其他用户的事务锁定表吗?

执行事务时为更新/删除/插入锁定表

PDO,mysql,事务和表锁定