亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在預訂時阻止桌子?

如何在預訂時阻止桌子?

PHP
慕沐林林 2021-09-18 10:37:49
如何阻止桌子預訂?我的預訂表有 from_datetime 和 to_datetime 字段。我想避免兩個用戶同時預訂東西的情況。我的嘗試:終端 1: - 用戶1LOCK TABLE booking READ;INSERT INTO booking VALUES ('2019-01-01 12:00:00', '2019-01-01 14:00:00');現在應該鎖定預訂表,其他用戶應該無法讀取它,但是......終端 2: - 用戶2SELECT * from booking 我有結果……為什么?這應該被阻止,直到我在 TERMINAL 1 做:unlock tables;
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

您需要使用LOCK TABLE booking WRITE;. 這表明您將要寫入該表,并且您需要阻止其他人讀取和寫入該表。


一個READ鎖定裝置,你只是要讀取表。它阻止其他用戶寫入表,以便您的所有讀取訪問一致的表內容。但它不會阻止其他用戶閱讀表格。


但是,如果您使用 InnoDB,您應該使用事務而不是表鎖。這是更細粒度的,并計算出要自動鎖定的內容。您的代碼如下所示:


START TRANSACTION;

SELECT COUNT(*) FROM booking

WHERE from_datetime = '2019-01-01 12:00:00' AND to_datetime = '2019-01-01 14:00:00'

FOR UPDATE;

-- If this returns zero count:

INSERT INTO booking VALUES ('2019-01-01 12:00:00', '2019-01-01 14:00:00');

COMMIT;

中的FOR UPDATE選項SELECT會導致 MySQL 鎖定表的適當部分。如果另一個用戶執行相同的代碼,如果他們嘗試選擇相同的時間,則會被阻止。


查看完整回答
反對 回復 2021-09-18
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

在某些情況下,鎖定表并不是一個好主意。

如果范圍重疊,您應該使用交易并檢查您的交易。


查看完整回答
反對 回復 2021-09-18
  • 2 回答
  • 0 關注
  • 160 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號