oracle与mysql在遇到死锁的时候都是自动检测并处理,但是处理还是有些不同,oracle在自动检测到死锁后,会kill一个会话导致的死锁,但是不会完全回退这个事务的所有 语句,mysql会回退所有的语句。
oracle;
session A:
SQL> update t1 set id=5 where id=1;

已更新 1 行。

SQL> update t2 set id=6 where id=1;
update t2 set id=6 where id=1
*
第 1 行出现错误:
ORA-00060: 等待资源时检测到死锁
sessionB:
SQL> update t2 set id=5 where id=1;

已更新 1 行。

SQL> update t1 set id=6 where id=1;–一直卡着

mysql中:
sessiona:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update t2 set id=5 where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update t1 set id=6 where id=1;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting t
action
mysql>

sessionb:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update t1 set id=5 where id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update t2 set id=6 where id=1;
Query OK, 1 row affected (6.92 sec)
Rows matched: 1 Changed: 1 Warnings: 0

看到oracle遇到了死锁还是需要手工上去解除的。