Php 如何同步同一表中的单元格值?
大问题 我正在用PHP和MySQL实现一个在线售票系统。我有一张桌子叫“积木票”之类的东西 此表看起来像: +-----------+------------+--------------+--------------+--------------+ | idblock | block_name | total_tickets| block_gender | idblock_pair | +-----------+------------+--------------+--------------+--------------+ | 1 | Block 1- M | 100 | MALE | 2 | +-----------+------------+--------------+--------------+--------------+ | 2 | Block 1- F | 100 | FEMALE | 1 | +-----------+------------+--------------+--------------+--------------+ +-----------+------------+--------------+--------------+--------------+ |idblock | block | name | total |门票| block | gender | idblock | pair| +-----------+------------+--------------+--------------+--------------+ |1 | 1区-M | 100 |男| 2| +-----------+------------+--------------+--------------+--------------+ |2 | 1座-F | 100 |女| 1| +-----------+------------+--------------+--------------+--------------+ 其中:Php 如何同步同一表中的单元格值?,php,mysql,database-deadlocks,optimistic-concurrency,database-concurrency,Php,Mysql,Database Deadlocks,Optimistic Concurrency,Database Concurrency,大问题 我正在用PHP和MySQL实现一个在线售票系统。我有一张桌子叫“积木票”之类的东西 此表看起来像: +-----------+------------+--------------+--------------+--------------+ | idblock | block_name | total_tickets| block_gender | idblock_pair | +-----------+------------+--------------+-----------
在下面的示例中,售出了一张票,现在我将总票数减少1: START TRANSACTION; SELECT * FROM block_of_tickets WHERE idblock in (1,2) FOR UPDATE; UPDATE block_of_tickets SET total_tickets = (total_tickets - 1) WHERE idblock in (1,2); COMMIT; 启动交易; 选择* 从一排票开始 其中idblock在(1,2)中用于更新; 更新\u块的\u票证 设置总票数=(总票数-1) 式中为(1,2); 犯罪
这是一个很好的解决方案吗?如果我理解,那么为什么不简单的更新
更新块\u票证设置total\u票证=total\u票证-1,其中idblock=solded\u票证id或idblock\u对=solded\u票证id
?“idblock\u对”或“idblock”永远不会是“solded\u票证id”。。。焊接的票据存储在另一个表中,外键为“idblock”和“iduser”。问题在于数据库的并发性——许多用户对同一资源存在争议。如果两个人同时购买两张票,在某些情况下可能会导致两个单元格之间的数据库不一致。