åè¨ï¼
    æè¿çäºä¸ç³»åmysqlæç« ã对Mysqlçåºç¡ç¥è¯ç解æäºä¸äºä¸å®è·µç¸ç¬¦åç认ç¥ãmarkä¸ä¸ã
æ£æï¼
    MySqlåºç¡ç¥è¯å为å大ç¹ï¼ä¸ã并åæ§å¶ï¼è¯»/åéï¼ï¼äºãäºå¡ï¼ä¸ãå¤çæ¬å¹¶åæ§å¶ï¼MVCCï¼ï¼åãåå¨å¼æã
ä¸ã并åæ§å¶ï¼
    æ»çæ¥è¯´ï¼åªåå¨ä»¥ä¸ä¸¤ç§éï¼
    1ï¼ãå ±äº«é/读é
    2ï¼ãæä»é/åé
   平æ¶æ们ç»å¸¸å¬è¯´åç§åæ ·çéï¼ä¾å¦InnoDBå ±æä¸ç§ç±»åçéå¦ä¸ãé½è½å½å ¥å°å ±äº«/æä»é两ç§ç±»åå½ä¸ã
- å ±äº«/æå®é(Shared and Exclusive Locks)
- æåé(Intention Locks)
- é´éé(Gap Locks)
- è®°å½é(Record Locks)
- 临é®é(Next-key Locks)
- æå ¥æåé(Insert Intention Locks)
- èªå¢é(Auto-inc Locks)   Â
äºãå 个并åçä¾åï¼æ¤å¤å¼æ为InnoDBä¸é离级å«å为é»è®¤é离级å«RRï¼ã
ä¾ä¸ãæå ¥å¹¶åï¼
åå§åï¼è¡¨ç»æ
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of `test`
-- ----------------------------
BEGIN;
INSERT INTO `test` VALUES ('1', 'bobo'), ('2', 'chenghe'), ('3', 'lisi');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
äºå¡Aï¼insert into test(name) values('xxx');
set session autocommit=0;
start transaction;
insert into test(name) values('xxx');
äºå¡Bï¼insert into test(name) values('ooo');
set session autocommit=0;
start transaction;
insert into test(name) values('ooo');
æµè¯é¡ºåºï¼äºå¡Aââãäºå¡Bï¼é离级å«RRä¸ï¼äºå¡Bæªè¢«Aé»å¡ã
å®é æ åµç©¶ç«æ¯ä»ä¹æ ·åçï¼åå¦åæ§è¡å¦ä¸å³å¯ç¥ï¼
äºå¡Cï¼
set session autocommit=0;
start transaction;
insert into test(name) values('qqq');
commit;
select * from test;
å±ç°ç»æå¦ä¸ï¼ä¸é´id为4ï¼5缺失ã
注æï¼å¹¶ä¸å°±ç®å°id为4ï¼5çæ°æ®åæ»ï¼æ¤å¤ä½ç½®ä¹ä¸ä¼è¢«åç»è¿½å æå ¥ã
ä¾äºãæå ¥å¹¶åï¼è¡¥å ï¼ï¼
åå§åï¼è¡¨ç»æ
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `un_id` (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of `test`
-- ----------------------------
BEGIN;
INSERT INTO `test` VALUES ('10', 'bobo'), ('20', 'chenghe'), ('30', 'lisi');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
äºå¡Aï¼insert into test(id,name) values (11,'xxxxx');
set session autocommit = 0;
start TRANSACTION;
insert into test(id,name) values (11,'xxxxx');
äºå¡Bï¼insert into test(id,name) values (12,'yyyyy');
set session autocommit = 0;
start TRANSACTION;
insert into test(id,name) values (12,'yyyyy');
æµè¯é¡ºåºï¼äºå¡Aââãäºå¡Bï¼æµè¯ç»æï¼äºå¡Bä¸è¢«é»å¡ã
æ»ç»ï¼ç±ä¾ä¸ãä¾äºå¯ç¥ï¼å½æå ¥å¹¶åçæ¶åï¼éçæ¯ä¸»é®idæå¨è¡ã
ä¾ä¸ã读å并å
Â
create table `t_2`(
`id` int(10) not null,
`name` VARCHAR(10) not null default '',
`sex` VARCHAR(10) not null default '',
PRIMARY key(`id`)
)ENGINE = INNODB DEFAULT CHARACTER SET utf8;
insert into `t_2` VALUES(1,'bobo','male'),(3,'hebe','female'),
(5,'selina','female'),(9,'ella','female'),(10,'robot','male');
äºå¡Aï¼è¯»äºå¡ï¼select * from t_2 where id BETWEEN 1 and 7 lock in share mode;(æå¨å sé/读éï¼åç»ä¼ä¸å¹¶è®²è¯»åé)
set session autocommit = 0;
start TRANSACTION;
select * from t_2 where id BETWEEN 1 and 7 lock in share mode;
äºå¡Bï¼åäºå¡ï¼insert into `t_2` VALUES(2,'robot','male')ï¼
set session autocommit = 0;
start TRANSACTION;
insert into `t_2` VALUES(2,'robot','male')ï¼
æ§è¡é¡ºåºï¼äºå¡Aââãäºå¡Bï¼ç»æäºå¡B被é»å¡ã
  çæ³1ï¼æ¤å¤è¢«äºå¡Aéå ¨è¡¨ã导è´äºå¡Bä¸å¯æ§è¡ï¼
  çæ³2ï¼æ¤å¤è¢«äºå¡Aéäºidåºé´æ®µï¼1-7ï¼ï¼
为äºè¯æ以ä¸ä¸¤ä¸ªçæ³ï¼æåäºå 个å®éªï¼åç°ä¸ä» 1-7被éä½ï¼çè³è¿id为8ä¹æ æ³æå ¥ãç¶èï¼id=10å´å¯ä»¥æå ¥ãå®é ä¸äºå¡Aéåºé´å¹¶ä¸æ¯idï¼1-7ï¼èæ¯idï¼1-9ï¼ï¼å¦ä¸å¾ï¼
æ»ç»ï¼éä½id为1-9åºé´æ®µãåå æ¯äºå¡Aæ§è¡çæ¶åï¼id=7è¿æ¡è®°å½å¨è¡¨ä¸æ¾ä¸å°ãæ以éä½ä»id=1å°åä¸æ¡è®°å½å³id=9çåºé´ãä¹å°±æ¯è¯´åå¦æäºå¡Aæ¥è¯¢èå´ä¸ºidï¼1ï¼13ï¼ï¼å½id=13æ¾ä¸å°ä¸13大äºæ大idæ¶ï¼ä¼éä½1å°æ£æ ç©·ãåä¹ä¹æ¯å¦æ¤ãç»ä¸å¼ å¾æ¹ä¾¿ç解ã
ä¾åã读å并åï¼ç»ï¼
表ç»æï¼è¡¨è¿æ¯ä¾ä¸ç表ã
äºå¡Aï¼select * from t_2 where id=14 lock in share mode;å Séæ¥è¯¢ä¸æ¡ä¸åå¨çæ°æ®ã
set session autocommit = 0;
start TRANSACTION;
select * from t_2 where id=14 lock in share mode;
äºå¡Bï¼insert into `t_2` VALUES(11,'robot','male');æå ¥ä¸æ¡æ°æ®id=11ã
set session autocommit = 0;
start TRANSACTION;
insert into `t_2` VALUES(11,'robot','male');
æ§è¡é¡ºåºï¼äºå¡Aââãäºå¡Bï¼äºå¡B被é»å¡ã
ç»è®ºï¼åä¾ä¸ä¸ï¼éä½10<idåºé´ã
è¡¥å ï¼ä¸ç¥éæ没æå°ä¼ä¼´åç°ï¼ä¾ä¸ãä¾åçæ¥è¯¢æé½æå¨å Sé/读éãåå¦ä¸å Séä¼ææ ·ãå¨innodbå¼æä¸ï¼ä¸å éä¼å 为å¤çæ¬å¹¶åæ§å¶ï¼MVCCï¼å¿«ç §è¯»ãä¹åä¼ç»è¯´å¿«ç §è¯»ï¼ç°å¨åªéè¦ç解为ï¼å¨æ¥è¯¢ç»ææ¯æ¥è¯¢æ¶é´ç¹æ¥è¯¢æ°æ®åºçä¸ä»½å¿«ç §ï¼éåæ°æ®ï¼ä¸ä¼é»å¡åæä½ã
ä¸ãè读/ä¸å¯éå¤è¯»/幻读/å é读çå 个ä¾åæ¥åæäºå¡å个é离级å«RU/RC/RR/Sã
æ¤å¤éä¸ä¿®æ¹äºå¡é离级å«åé®é¢å ³ç³»å代ç ï¼
000ãæ¥è¯¢é离级å«ï¼ä¿®æ¹é离级å«ï¼
select @@global.tx_isolation,@@tx_isolation;
set global transaction isolation level read committed;
set session transaction isolation level read committed;
set global transaction isolation level repeatable read;
set session transaction isolation level repeatable read;
è读ï¼äºå¡å¯ä»¥è¯»åæªæ交çæ°æ®ã
é离级å«ä¸ºREAD UNCOMMITTEDæä¼åºç°ã举个ä¾åï¼
表ç»æä¸ä¾ä¸å¦ä¸ï¼
äºå¡Aï¼æå ¥æªæ交ã
set global transaction isolation level read UNCOMMITTED;
set session transaction isolation level read UNCOMMITTED;
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
insert into `t_2` VALUES(11,'robot','male');
äºå¡Bï¼æ¥è¯¢id>10ã
set global transaction isolation level read UNCOMMITTED;
set session transaction isolation level read UNCOMMITTED;
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_2 where id>9;
æ§è¡é¡ºåºï¼äºå¡Aââãäºå¡Bï¼äºå¡Bè½æ¥å°å¦ä¸ï¼äº§çè读ã
å®é å·¥ä½ä¸å¾å°æè¿æ ·çæ åµï¼æ¯ç«ä½¿ç¨è¯»æªæ交é离级å«ççå¿æ²¡è§è¿ã
ä¸å¯éå¤è¯»ï¼å 为两次æ§è¡åæ ·çæ¥è¯¢ï¼å¯è½ä¼å¾å°ä¸ä¸æ ·çç»æã
é离级å«ä½äºæçäºREAD COMMITTEDæä¼åºç°ãè¿ä¸ªæ¦å¿µæ¯è¾é¾ç解çå°æ¹å¨äºï¼ä½ ä¼é»è®¤æ³å½ç¶ç认为åªè¦å·²ç»æ交commitï¼å°±åºè¯¥è½è¢«å ¶å®äºå¡çå°ãå®é ä¸ï¼è¿æ ·å°±ä¼é æåä¸ä¸ªäºå¡ï¼ä¸¤æ¬¡æ¥è¯¢å¾å°ä¸ä¸æ ·çç»æã为äºæ´å¥½ç解ï¼å 为RRé离级å«è½é¿å è¿ç§æ åµï¼æ以æåäºä¸ä¸ªå¯¹æ¯ã
举个ä¾åï¼
äºå¡RRé离级å«ï¼
set global transaction isolation level REPEATABLE read ;
set session transaction isolation level REPEATABLE read;
select @@global.tx_isolation,@@tx_isolation;
äºå¡Aï¼ä¸¤æ¡æ¥è¯¢è¯å¥ï¼
set session autocommit = 0;
start TRANSACTION;
select * from t_2 where id>9;
--ä¸é´æ延æ¶---
select * from t_2 where id>9;
äºå¡Bï¼æå ¥å¹¶æ交ã
set session autocommit = 0;
start TRANSACTION;
insert into `t_2` VALUES(11,'robot','male');
commit;
æ§è¡é¡ºåºï¼äºå¡Aæ§è¡å°ç¬¬ä¸è¡æ¥è¯¢ï¼äºå¡Bæ§è¡å®ï¼äºå¡Aæ§è¡ç¬¬5è¡æ¥è¯¢ãæ¥ç两次ç»æãåçä¸å°id=11çç»æãåä¸äºå¡ï¼ä¸¤æ¬¡æ¥è¯¢ä¸æ²¡æä¿®æ¹ï¼æ¥è¯¢ç»æç¸åãå®ç¾ï¼
å°é离级å«æ¹ä¸ºï¼äºå¡RCé离级å«ï¼
set global transaction isolation level read COMMITTED;
set session transaction isolation level read COMMITTED;
select @@global.tx_isolation,@@tx_isolation;
æ§è¡é¡ºåºï¼äºå¡Aæ§è¡å°ç¬¬ä¸è¡æ¥è¯¢ï¼äºå¡Bæ§è¡å®ï¼äºå¡Aæ§è¡ç¬¬5è¡æ¥è¯¢ãï¼åä¸ï¼æ¥ç两次ç»æã第ä¸æ¬¡çä¸å°ï¼ç¬¬äºæ¬¡è½çå°id=11çç»æãåä¸äºå¡ï¼ä¸¤æ¬¡æ¥è¯¢ä¸æ²¡æä¿®æ¹ï¼æ¥è¯¢ç»æä¸ç¸åãä¸å¯éå¤è¯»ã
PSï¼å ¶å®è¿æ¯çéæ±ï¼çåä¸äºå¡ä¸ï¼æ¯å¦éè¦çå°å·²æ交çç»æã
幻读ï¼å½äºå¡A读åæ个èå´è®°å½æ¶ï¼äºå¡Båå¨è¯¥èå´æå ¥æ°çºªå½ï¼äºå¡Aå次读åä¸èå´è®°å½æ¶ï¼ä¼äº§çå¹»è¡ã
é离级å«ä¸ºä½äºçäºREPEATABLE READé½ä¼åºç°ãï¼ä¹å°±æ¯åºæ¬ä¸æ²¡æ³é¿å ï¼é¤é使ç¨æåä¸ç§é离级å«ï¼
å ¶å®å¨ä¸å¼å§ä¾ä¸ï¼å·²ç»è§å°äºå¹»è¯»ãåªæ¯å½æ¶æ²¡æå¨æãå¨æ¤æåºæ¥åç¬è®²ä¸ä¸ã
åå§åï¼è¡¨ç»æï¼idèªå¢ï¼
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `t_3`;
CREATE TABLE `t_3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
-- ----------------------------
-- Records of `test`
-- ----------------------------
BEGIN;
INSERT INTO `t_3` VALUES ('1', 'bobo'), ('2', 'chenghe'), ('3', 'lisi');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
å 为ä¸å¯éå¤è¯»è¿ä¸ªç¹æ§ï¼å¨rc级å«å·²ç»è¢«å¤çãä½æ¯ï¼å½æå ¥ä¹åãè¿æ¯ä¼åºç°ä¸äºå¾å¥æªçäºã
äºå¡Aï¼
set global transaction isolation level REPEATABLE read ;
set session transaction isolation level REPEATABLE read;
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_3;
insert into t_3(name) values('simayi');
--ä¸é´æ延æ¶ï¼å
¶ä»äºå¡æå
¥---
insert into t_3(name) values('zhugeliang');
select * from t_3;
commit;
äºå¡Bï¼
set global transaction isolation level REPEATABLE read ;
set session transaction isolation level REPEATABLE read;
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_3;
insert into t_3(name) values('caocao');
æ§è¡é¡ºåºï¼äºå¡Bå¨äºå¡A两个æå ¥ä¹é´å»¶æ¶å¤ã
æ¥è¯¢ç»æåç°ï¼åä¸ä¸ªäºå¡ä¸¤ä¸ªè¿ç»çæå ¥ï¼ä¸é´å± ç¶æ空è¡ãid=5å¢ï¼è¢«äºå¡Båæäºä¹ï¼è½ç¶äºå¡Bè¿æ交é½æ²¡æï¼ä½æ¯è¿æ¯åæäºè¿ä¸ªidã幻读ç±æ¤åçã
å é读ï¼è¯»åçæ¯ä¸è¡è®°å½é½å éã
å é读è½è§£å³åé¢ææçé®é¢ï¼è读/ä¸å¯éå¤è¯»/幻读ãä½ï¼å®èªèº«å°±æ¯ä¸ä¸ªé®é¢ãæ¯ä¸ä¸ªé½äºå¡é½å éäºãé£è¯å®å¨å¹¶åçæ¶åä¼åºç°æ§è½ç¶é¢ãæä»¥æ ¹æ®éæ±æè¡¡æ¯å¦è¦éç¨è¿ç§æ¹å¼ã
set global transaction isolation level SERIALIZABLE;
set session transaction isolation level SERIALIZABLE;
select @@global.tx_isolation,@@tx_isolation;
åãå¤çæ¬å¹¶åæ§å¶ï¼MVCCï¼ï¼
书ä¸MVCCå¯¹å¿«ç §è¯»çå®ä¹ï¼åªæ¥æ¾æ©äºå½åäºå¡çæ¬çæ°æ®è¡ã
åé¢ä¸ç´å¨è¯´å¿«ç §è¯»ï¼å¿«ç §è¯»å°åºæ¯æä¹ä¸åäºãå¿«ç §è¯»åªå¨RR/RCé离级å«ä¸å·¥ä½ãèä¸ä¹å读å并åçæ¶åï¼è¯»å并åç读é½ä¸æ¯å¿«ç §è¯»ï¼è¯´æå¿«ç §è¯»æ¯ä¸ç§éé»å¡ç读ã举个ä¾åã
åå§åï¼è¡¨ç»æ
ä¾ä¸ãåä¸äºå¡å ï¼
äºå¡A-1ï¼
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_3;
éè¿ä»¥ä¸ä»£ç æ¥çå½åäºå¡id/äºå¡çæ¬å·ï¼æ§è¡å®äºå¡A-1,äºå¡id=15800
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
äºå¡A-2ï¼
-----æ¥äºå¡A-1
insert into t_3(name) values('simayi');
select * from t_3;
éè¿ä¸é¢ä»£ç æ¥çå½åäºå¡id/äºå¡çæ¬å·ï¼æ§è¡å®äºå¡A-2,äºå¡idä¾ç¶æ¯=15800
æ§è¡é¡ºåºï¼äºå¡A-1-->äºå¡A-2ãæ§è¡ç»æãäºå¡A-1ï¼æ¥è¯¢ç»æå表ç»æç¸åãäºå¡A-2ï¼æ¥è¯¢ç»æå¤æå ¥äºä¸æ¡æ°æ®ã
ç»è®ºï¼åä¸äºå¡ä¸åè¯å¥äºå¡çæ¬å·å¯ä¸ã
ä¾äºãä¸åäºå¡å ï¼é»è®¤é离级å«RRï¼ï¼
äºå¡Aï¼
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_3;
----延æ¶äºå¡Bæ§è¡å¨æ¤-----
select * from t_3;
éè¿ä»£ç æ¥çå½åäºå¡id/äºå¡çæ¬å·ï¼æ§è¡å®äºå¡A,äºå¡id=15805ï¼
äºå¡Bï¼
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_3;
insert into t_3(name) values('simayi');
select * from t_3;
éè¿ä»£ç æ¥çå½åäºå¡id/äºå¡çæ¬å·ï¼æ§è¡äºå¡B,æªæ交æ¶ï¼äºå¡id=15806ï¼
æ§è¡é¡ºåºï¼äºå¡Aââãäºå¡B ï¼+commitï¼ââãäºå¡Aï¼åç°äºå¡Aå§ç»äºå¡id=15805,æ以ä¸ä¼æ¥å°æ¯äºå¡id15805大çæ°æ®ã
äºå¡Cï¼
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_3;
æ§è¡é¡ºåºï¼åæ§è¡äºå¡Cï¼äºå¡Cäºå¡ID为15807ãå¯ä»¥çå°äºå¡Bæ交çç»æã
ç»ä¸å¼ å¾å§ï¼å¹²å·´å·´ç代ç çèµ·æ¥å¾ä»¤äººè´¹è§£ã
Â
PSï¼åå¦é离级å«ä¸ºRCï¼é£ä¹äºå¡A两æ¡æ¥è¯¢ç»æå°ä¸åã第äºæ¡æ¥è¯¢è¯å¥å°ä¼æ¥è¯¢å°æ°æå ¥çæ°æ®ãå 为RR级å«æ»æ¯è¯»äºå¡å¼å§æ¶å»çäºå¡å¿«ç §(15805)ãRC级å«æ»æ¯è¯»å½åæ°æ®è¡çææ°å¿«ç §(15807)ã
æ¤å¤è¿æä¸ä¸ªç¥è¯ç¹ï¼UNDOãREDOæ¥å¿ãç¥ã
äºãåå¨å¼æï¼
åå¨å¼æä¸æç®å¤è®²ã大æ¦å°±æ¯é¢è¯é¢çå¥è·¯ã常ç¨ä¸¤ç§InnoDBåMyisAmå¼æã两ç§åå¨å¼æçåºå«åä¼ç¼ºç¹ååºç¨åºæ¯ãé»è®¤å¹³æ¶ä½¿ç¨InnoDBå°±å¤äºãç¥ã
å ãèéç´¢å¼ï¼
é¦å ä¸æç®è®²èéç´¢å¼åæ®éç´¢å¼çåºå«åèç³»ï¼æç®è®²ä¸ä¸æç´¢å¼å没æç´¢å¼çåºå«ãè½ç¶æ们平æ¶å 为MVCCå¿«ç §è¯»ï¼å¯¼è´è¯»åä¸ä¼äºç¸é»å¡ãä½æ¯åå¦æ们使ç¨çæ¯Séç读ã举个ä¾åå¦ä¸ï¼
åå§åï¼æ°æ®è¡¨ï¼id为primary keyï¼name 为æ®éå段ï¼æªå ç´¢å¼ãï¼RRé离级å«ï¼
äºå¡Aï¼Séæ¥è¯¢ä¸æ¡ä¸åå¨çæ°æ®ã
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
select * from t_3 where name = 'zhugeliang' lock in share mode;
äºå¡Bï¼ä»»ä½å¯¹å·²ç¥çç´¢å¼æ读åçæä½é½æ§è¡ä¸äºãä¾å¦å¢å ä¸è¡ï¼éè¦å¢å ç´¢å¼ãå é¤ä¸è¡ï¼éè¦å é¤ç´¢å¼ãæ´æ°ä¸è¡ï¼éè¦éå®å½åç´¢å¼è¡ã
select @@global.tx_isolation,@@tx_isolation;
set session autocommit = 0;
start TRANSACTION;
insert into t_3(name) values('caocao');
ç»è®ºï¼å½sé读ä¸æ¡ä¸åå¨çè®°å½ï¼å½æ¡ä»¶å段没索å¼çæ¶åï¼ä¼ç´¢å·²ç¥æ´è¡¨ç´¢å¼ãå¡æ¯åæä½ï¼å¢å æ¹ï¼é½å°è¢«é»å¡ã
解å³æ¹æ¡ï¼ç»nameå段å æ®éç´¢å¼ãè¿æ ·å½æ¥æ¾name=âä¸åå¨çè®°å½â çç´¢å¼æ¶æ¥ä¸å°ï¼ä¹å°±ä¸ä¼ç´¢å¯¹åºçèéç´¢å¼ã
åä¹å¼åºèéç´¢å¼ç使ç¨ãå½æ¥è¯¢æ¡ä»¶ä¸ºæ®éç´¢å¼çæ¶åï¼ä¼å æ ¹æ®æ®éç´¢å¼æ¥å°å¯¹åºçèéç´¢å¼ï¼åéè¿èéç´¢å¼æ¥å°valueå¼ãåå¦name为æ®éç´¢å¼ï¼id为èéç´¢å¼ãæ¥è¯¢æ¡ä»¶ä¸ºselect * from t_3 where name = 'bobo';
å¦ä¸ï¼å·¦å¾ä¸ºæ®éç´¢å¼boboæ¥æ¾å°èéç´¢å¼id=1ï¼ç¶åéè¿èéç´¢å¼id=1æ¥æ¾èéç´¢å¼ä¸è¯¥æ¡æ°æ®çå ¶ä»ä¿¡æ¯ã
åçæç¹ç´¯ï¼æé®é¢å说ãï½over
Â
Â
Â
Â