MySQL concurrency, how does it work and do I need to handle it in my application

前端 未结 1 1225
太阳男子
太阳男子 2020-11-30 04:47

I am currently running a MySQL database. All of my tables are using the Table Engine InnoDB.

Everyone who logs into my application can view records and I am worried

相关标签:
1条回答
  • 2020-11-30 05:16

    SQL statements are atomic. That is, if you execute something like this:

    UPDATE Cars SET Sold = Sold + 1
    

    Nobody can change the Sold variable during this statement. It is always incremented by 1, even if somebody else is executing the same statement concurrently.

    The problem occurs if you have statements that depend on each other:

    a = SELECT Sold FROM Cars;
    UPDATE Cars SET Sold = a + 1;
    

    Between these queries, another user can change the table Cars and update Sold. To prevent this, wrap it in a transaction:

    BEGIN;
    a = SELECT Sold FROM Cars;
    UPDATE Cars SET Sold = a + 1;
    COMMIT;
    

    Transactions are supported by InnoDB, but not by MyISAM.

    0 讨论(0)
提交回复
热议问题