如何在MySQL中的一个原子操作更新后选择值



在这里,我想增加字段计数,然后选择一个原子操作的计数结果。

代码是:

sql = ("update user_cout set count = count+1 "
               "where username=%s")
cursor = connection.cursor()
cursor.execute(sql, (username, ))
cursor.execute("select count from user_count "
                       "where username=%s", (username, ))

有什么推荐方法吗?

您需要在事务中执行UPDATESELECT(即不自动提交的语句):

connection.autocommit(0);

然后可以执行现有语句并将它们显式提交到数据库:

connection.commit();

请注意,要实现原子性,user_count表必须使用事务存储引擎(例如 InnoDB)。

>@linbo,您可以在数据库中创建一个函数/过程(在此处查看如何执行此操作),然后在代码中仅运行一次调用:

sql = ("SELECT MY_CUSTOM_FUNC(%s)")
cursor = connection.cursor()
cursor.execute(sql, (username, ))

使用此方法有很多优点:

  1. 你集中你的逻辑,它可以从你的应用程序中的许多地方调用;
  2. 更少的代码;
  3. MySQL 默认在函数中使用原子性,一旦它是数据库的简单操作;

我希望它有所帮助!

你可以这样做:

cursor.execute("UPDATE tbl_name SET pos = @next_pos := pos + 1 WHERE some_id = %s; SELECT @next_pos;", (12345, ))
cursor.nextset()
result = cursor.fetchone()

然后result[0]将包含递增的值。

最新更新