MySQL 是一種開源的關系型數據庫管理系統,經過多年的發展,其已成為眾多企業級應用程序的首選,它支持眾多的數據存儲引擎,如:InnoDB、MyISAM、CSV等等。
在MySQL中,可重復讀取是一種隔離級別,它是基于多版本并發控制(MVCC)實現的。
在MySQL的可重復讀隔離級別中,事務在執行過程中操作的數據版本始終是該事務第一次查詢的數據版本,換句話說,即使其他事務修改了這個數據,它也不會看到這些變化。
/*創建一個新的表*/
CREATE TABLE `t` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*插入數據*/
INSERT INTO t(id,name) VALUES (1,'Alice'),(2,'Bob');
/*開啟一個新的事務,此事務將讀取所有的數據*/
BEGIN;
SELECT * FROM t;
/*開啟另一個新的事務,并修改第一行數據對應的name值*/
BEGIN;
UPDATE t SET name='Alex' WHERE id=1;
/*提交修改的數據*/
COMMIT;
/*回到第一個事務中,并再次讀取所有的數據*/
SELECT * FROM t;
/*提交第一個事務*/
COMMIT;
在以上示例中,第一個事務始終只能看到第一次查詢時的數據(id為1和2,name分別為Alice和Bob),而無法感知到第二個事務對id為1的name的修改,這就是MySQL可重復讀取隔離級別帶來的“看不見”效果。
在實際的開發中,我們可以利用可重復讀取隔離級別來確保其它事務不會干擾到自己的查詢結果,從而保證數據的一致性和準確性。