【发布时间】:2019-03-15 16:34:19
【问题描述】:
我正在 mysql 上尝试一些事务级别。
我有会话 S1 和会话 S2。 S1 正在使用默认隔离 lavel 可重复读取。对于 S2,我设置了 Isolation Level Serializable。
这里是情景:
S1:
set innodb_lock_wait_timeout = 5;
start transaction;
S2:
set session transaction isolation level serializable;
start transaction;
select count(*) from produkt;
S1:
select count(*) from produkt;
update kategorie set bezeichnung = 'Smartphone' where kategorieid = 1;
S2:
insert into produkt(produktid, bezeichnung, kategorieid_fk) values (201, 'iPhone 8z', 1);
谁能解释一下,为什么 S2 的 insert into produkt 现在被屏蔽了?
这是表模式:
-- Exportiere Datenbank Struktur für transaktiondb
CREATE DATABASE IF NOT EXISTS `transaktiondb`;
USE `transaktiondb`;
-- Exportiere Struktur von Tabelle transaktiondb.kategorie
CREATE TABLE IF NOT EXISTS `kategorie` (
`KategorieID` int(11) NOT NULL AUTO_INCREMENT,
`Bezeichnung` varchar(255) NOT NULL,
PRIMARY KEY (`KategorieID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Exportiere Struktur von Tabelle transaktiondb.produkt
CREATE TABLE IF NOT EXISTS `produkt` (
`ProduktID` int(11) NOT NULL AUTO_INCREMENT,
`Bezeichnung` varchar(255) NOT NULL,
`KategorieID_FK` int(11) NOT NULL,
PRIMARY KEY (`ProduktID`),
KEY `fk_Produkt_Kategorie_idx` (`KategorieID_FK`),
CONSTRAINT `fk_Produkt_Kategorie` FOREIGN KEY (`KategorieID_FK`) REFERENCES `kategorie` (`KategorieID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
【问题讨论】:
标签: mysql isolation-level