session_1  | session_2  | 
mysql> set autocommit = 0; Query OK, 0 rows affected (0.00 sec) mysql> select * from target_tab; Empty set (0.00 sec) mysql> select * from source_tab where name = '1'; +----+------+----+ | d1 | name | d2 | +----+------+----+ |  4 | 1 | 1 | |  5 | 1 | 1 | |  6 | 1 | 1 | |  7 | 1 | 1 | |  8 | 1 | 1 | +----+------+----+ 5 rows in set (0.00 sec)  | mysql> set autocommit = 0; Query OK, 0 rows affected (0.00 sec) mysql> select * from target_tab; Empty set (0.00 sec) mysql> select * from source_tab where name = '1'; +----+------+----+ | d1 | name | d2 | +----+------+----+ |  4 | 1 | 1 | |  5 | 1 | 1 | |  6 | 1 | 1 | |  7 | 1 | 1 | |  8 | 1 | 1 | +----+------+----+ 5 rows in set (0.00 sec)  | 
mysql> insert into target_tab select d1,name from source_tab where name = '1'; Query OK, 5 rows affected (0.00 sec) Records: 5  Duplicates: 0 Warnings: 0  | |
mysql> update source_tab set name = '1' where name = '8'; 等待  | |
commit;  | |
返回结果 commit;  | 
session_1  | session_2  | 
mysql> set autocommit = 0; Query OK, 0 rows affected (0.00 sec) mysql>set innodb_locks_unsafe_for_binlog='on' Query OK, 0 rows affected (0.00 sec) mysql> select * from target_tab; Empty set (0.00 sec) mysql> select * from source_tab where name = '1'; +----+------+----+ | d1 | name | d2 | +----+------+----+ |  4 | 1 | 1 | |  5 | 1 | 1 | |  6 | 1 | 1 | |  7 | 1 | 1 | |  8 | 1 | 1 | +----+------+----+ 5 rows in set (0.00 sec)  | mysql> set autocommit = 0; Query OK, 0 rows affected (0.00 sec) mysql> select * from target_tab; Empty set (0.00 sec) mysql> select * from source_tab where name = '1'; +----+------+----+ | d1 | name | d2 | +----+------+----+ |  4 | 1 | 1 | |  5 | 1 | 1 | |  6 | 1 | 1 | |  7 | 1 | 1 | |  8 | 1 | 1 | +----+------+----+ 5 rows in set (0.00 sec)  | 
mysql> insert into target_tab select d1,name from source_tab where name = '1'; Query OK, 5 rows affected (0.00 sec) Records: 5  Duplicates: 0 Warnings: 0  | |
session_1未提交,可以对session_1的select的记录进行更新操作。 mysql> update source_tab set name = '8' where name = '1'; Query OK, 5 rows affected (0.00 sec) Rows matched: 5  Changed: 5 Warnings: 0 mysql> select * from source_tab where name = '8'; +----+------+----+ | d1 | name | d2 | +----+------+----+ |  4 | 8 | 1 | |  5 | 8 | 1 | |  6 | 8 | 1 | |  7 | 8 | 1 | |  8 | 8 | 1 | +----+------+----+ 5 rows in set (0.00 sec)  | |
更新操作先提交 mysql> commit; Query OK, 0 rows affected (0.05 sec)  | |
插入操作后提交 mysql> commit; Query OK, 0 rows affected (0.07 sec)  | |
此时查看数据,target_tab中可以插入source_tab更新前的结果,这符合应用逻辑: mysql> select * from source_tab where name = '8'; +----+------+----+ | d1 | name | d2 | +----+------+----+ |  4 | 8 | 1 | |  5 | 8 | 1 | |  6 | 8 | 1 | |  7 | 8 | 1 | |  8 | 8 | 1 | +----+------+----+ 5 rows in set (0.00 sec) mysql> select * from target_tab; +------+------+ | id   | name | +------+------+ | 4    | 1.00 | | 5    | 1.00 | | 6    | 1.00 | | 7    | 1.00 | | 8    | 1.00 | +------+------+ 5 rows in set (0.00 sec)  | mysql> select * from tt1 where name = '1'; Empty set (0.00 sec) mysql> select * from source_tab where name = '8'; +----+------+----+ | d1 | name | d2 | +----+------+----+ |  4 | 8 | 1 | |  5 | 8 | 1 | |  6 | 8 | 1 | |  7 | 8 | 1 | |  8 | 8 | 1 | +----+------+----+ 5 rows in set (0.00 sec) mysql> select * from target_tab; +------+------+ | id   | name | +------+------+ | 4    | 1.00 | | 5    | 1.00 | | 6    | 1.00 | | 7    | 1.00 | | 8    | 1.00 | +------+------+ 5 rows in set (0.00 sec)  | 
| ...... SET TIMESTAMP=1169175130; BEGIN; # at 274 #070119 10:51:57 server id 1 end_log_pos 105 Query thread_id=1 exec_time=0 error_code=0 SET TIMESTAMP=1169175117; update source_tab set name = '8' where name = '1'; # at 379 #070119 10:52:10 server id 1 end_log_pos 406 Xid = 5 COMMIT; # at 406 #070119 10:52:14 server id 1 end_log_pos 474 Query thread_id=2 exec_time=0 error_code=0 SET TIMESTAMP=1169175134; BEGIN; # at 474 #070119 10:51:29 server id 1 end_log_pos 119 Query thread_id=2 exec_time=0 error_code=0 SET TIMESTAMP=1169175089; insert into target_tab select d1,name from source_tab where name = '1'; # at 593 #070119 10:52:14 server id 1 end_log_pos 620 Xid = 7 COMMIT; ......  | 
| 欢迎光临 MariaDB社区 (http://123.56.88.72/) | Powered by Discuz! X3.2 |