dmin门户。大多数情况下,查询都是通过PHP mysqli完成的单记录更新。只有在程序崩溃的情况下,我才能提前断开连接。没有正确处理的超时应该这样做。无论如何,我真的不明白为什么显式事务应该比autocommit更安全。您链接的问题中描述的情况不适用,因

dmin门户。大多数情况下,查询都是通过PHP mysqli完成的单记录更新。只有在程序崩溃的情况下,我才能提前断开连接。没有正确处理的超时应该这样做。无论如何,我真的不明白为什么显式事务应该比autocommit更安全。您链接的问题中描述的情况不适用,因,mysql,timeout,locking,innodb,Mysql,Timeout,Locking,Innodb,dmin门户。大多数情况下,查询都是通过PHP mysqli完成的单记录更新。只有在程序崩溃的情况下,我才能提前断开连接。没有正确处理的超时应该这样做。无论如何,我真的不明白为什么显式事务应该比autocommit更安全。您链接的问题中描述的情况不适用,因为OP不使用显式事务,只使用autocommit的简单更新。即使(荒谬的)一个拔掉了电缆,如在那个问题中,在更新的中间,更新应该完成并在几毫秒内自动提交。应该立即检测死锁(索引未按相同顺序锁定的更新可能会发生死锁),以排除OP看到的查询挂起的另


dmin门户。大多数情况下,查询都是通过PHP mysqli完成的单记录更新。只有在程序崩溃的情况下,我才能提前断开连接。没有正确处理的超时应该这样做。无论如何,我真的不明白为什么显式事务应该比
autocommit
更安全。您链接的问题中描述的情况不适用,因为OP不使用显式事务,只使用autocommit的简单更新。即使(荒谬的)一个拔掉了电缆,如在那个问题中,在更新的中间,更新应该完成并在几毫秒内自动提交。应该立即检测死锁(索引未按相同顺序锁定的更新可能会发生死锁),以排除OP看到的查询挂起的另一个可能原因。
UPDATE locations SET x = "43.630181733", y = "-79.882244160", updated = NULL
    WHERE uuid = "6a5c7e9d-400f-c098-68bd-0a0c850b9c86";
locations
Field      Type         Null  Default
uuid       varchar(36)  No
x          double       Yes    NULL
y          double       Yes    NULL
updated    timestamp    No     CURRENT_TIMESTAMP 


Indexes:
Keyname    Type     Cardinality  Field
PRIMARY    PRIMARY  5            uuid
x          INDEX    5            x
y          INDEX    5            y
updated    INDEX    5            updated
transaction1> START TRANSACTION;
transaction1> SELECT * FROM t WHERE i > 20 FOR UPDATE;
+------+
| i |
+------+
| 21 |
| 25 |
| 30 |
+------+
transaction2> START TRANSACTION;
transaction2> INSERT INTO t VALUES(26);
transaction2> COMMIT;
transaction1> select * from t where i > 20 FOR UPDATE;
+------+
| i |
+------+
| 21 |
| 25 |
| 26 |
| 30 |
+------+
transaction1 > SELECT * FROM t;
+------+
| age |
+------+
| 21 |
| 25 |
| 30 |
+------+
transaction1 > START TRANSACTION;
transaction1 > DELETE FROM t WHERE age=25;
transaction2 > START TRANSACTION;
transaction2 > INSERT INTO t VALUES(26);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
transaction2 > INSERT INTO t VALUES(29);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
transaction2 > INSERT INTO t VALUES(23);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
transaction2 > INSERT INTO t VALUES(31);
Query OK, 1 row affected (0.00 sec)
UPDATE locations SET updated = NULL;