MySQL支持多用戶同時讀寫,這是因為MySQL使用了并發控制機制來控制對數據庫的訪問。
在并發控制機制中,MySQL使用了鎖機制和事務機制。鎖機制針對的是數據庫中的行或者表,它可以把某些數據行或者表鎖定,保證在某一時間內只有一個用戶對該數據進行操作。事務機制則可以保證操作的原子性、一致性、隔離性和持久性。
下面是一個簡單的代碼演示MySQL的并發控制機制:
-- 創建一個名為test的數據庫 CREATE DATABASE test; -- 進入test數據庫 USE test; -- 創建一個名為user的表格 CREATE TABLE user (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(20), age INT, PRIMARY KEY (id)); -- 向user表格插入數據 INSERT INTO user (name, age) VALUES ('Tom', 18), ('Jack', 20), ('Lucy', 22); -- 在開始事務之前開啟事務 START TRANSACTION; -- 查詢id為1的數據,并鎖定該行 SELECT * FROM user WHERE id = 1 FOR UPDATE; -- 在該行中修改數據 UPDATE user SET age = 19 WHERE id = 1; -- 提交事務 COMMIT;
在上述代碼中,通過使用BEGIN來開啟一個事務,然后使用SELECT ... FOR UPDATE來鎖定了id為1的數據,并在該行中進行修改操作,最后使用COMMIT來提交事務。在此過程中,如果有其他用戶也在同時操作這個數據行,MySQL會自動加上鎖機制,并進行阻塞等待,直到當前用戶處理完該數據行為止。