死鎖
一個例子就可以明白
-- 事務A
USE sql_store;
START TRANSACTION;
UPDATE products
SET property = 'xxx'
WHERE product_id = 1;
UPDATE orders
SET order_name = 'xxx'
WHERE order_id = 1;
COMMIT;
-- 事務B
USE sql_store;
START TRANSACTION;
UPDATE orders
SET order_name = 'xxx'
WHERE order_id = 1;
UPDATE products
SET property = 'xxx'
WHERE product_id = 1;
COMMIT;
事務A執行到 UPDATE orders 然後事務B開始執行了,這時候事務A必須得等事務B執行完,事務B執行到 UPDATE products,發現這條資料被事務A鎖住了,事務B就得等事務A執行完,這樣就會産生死鎖。
避免死鎖...
将事務按照相同的順序編寫...
簡化事務,縮短運作時長