【发布时间】:2017-04-07 06:26:19
【问题描述】:
抱歉,这是个愚蠢的问题。 我的 MySQL InnoDB 应用程序有 70 多个表并使用事务。 除了一件事(表)之外,一切都运行良好:
CREATE TABLE IF NOT EXISTS `mag_pj_art_sums` (
`id` int(11) NOT NULL, (primary key)
`id_pj` int(11) NOT NULL, (index)
`id_artikal` int(11) NOT NULL, (index)
`kol_stanje_knjig` decimal(18,2) DEFAULT NULL)
我对所有查询都使用相同的原则:
START TRANSACTION (query('set autocommit=0;'); query('START TRANSACTION;');)
SELECT … FROM table WHERE …
UPDATE TABLE SET …. WHERE ….
COMIT
在所有表中,PRIMARY 键用于 SELECT 和 UPDATE(在下面的查询模式中)。
除了我使用的 mag_pj_art_sums:
SELECT … FROM mag_pj_art_sums WHERE (id_artikal='$id_artikal' AND id_pj='$id_pj')
和
UPDATE mag_pj_art_sums SET … WHERE (id_artikal='$id_artikal' AND id_pj='$id_pj')
在这种情况下这些行是否可能没有被锁定?
因为,只有在此表中,当有并发 SELECT - UPDATE 查询时,我才得到不一致的值。查询执行没有错误,但值没有按应有的方式更新。
【问题讨论】:
标签: mysql transactions innodb