Bug #95936 insert into ... select does not work with repeatable read
| Submitted: | 23 Jun 2019 20:54 | Modified: | 27 Jun 2019 13:16 |
|---|---|---|---|
| Reporter: | Tianshi Wang | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S3 (Non-critical) |
| Version: | 5.7.25 | OS: | CentOS |
| Assigned to: | CPU Architecture: | x86 | |
| Tags: | insert into select, insert select, repeatable read, transaction level | ||
[23 Jun 2019 20:54]
Tianshi Wang
[27 Jun 2019 13:16]
MySQL Verification Team
Hi,
Thanks for the test case, reproduced as described.
bogdan
mysql [localhost:5726] {msandbox} (test) > create table ta(id int);
Query OK, 0 rows affected (0.01 sec)
mysql [localhost:5726] {msandbox} (test) > create table tb(id int);
Query OK, 0 rows affected (0.02 sec)
mysql [localhost:5726] {msandbox} (test) > insert into ta values (1),(3);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql [localhost:5726] {msandbox} (test) > set global tx_isolation=2;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql [localhost:5726] {msandbox} (test) > show warnings;
+---------+------+----------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | '@@tx_isolation' is deprecated and will be removed in a future release. Please use '@@transaction_isolation' instead |
+---------+------+----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql [localhost:5726] {msandbox} (test) > set session tx_isolation=2;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql [localhost:5726] {msandbox} (test) > show warnings;
+---------+------+----------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | '@@tx_isolation' is deprecated and will be removed in a future release. Please use '@@transaction_isolation' instead |
+---------+------+----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql [localhost:5726] {msandbox} (test) > begin;
Query OK, 0 rows affected (0.00 sec)
mysql [localhost:5726] {msandbox} (test) > select * from ta;
+------+
| id |
+------+
| 1 |
| 3 |
+------+
2 rows in set (0.00 sec)
mysql [localhost:5726] {msandbox} (test) > select * from ta;
+------+
| id |
+------+
| 1 |
| 3 |
+------+
2 rows in set (0.00 sec)
mysql [localhost:5726] {msandbox} (test) >
mysql [localhost:5726] {msandbox} (test) > insert into tb select * from ta;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql [localhost:5726] {msandbox} (test) > select * from tb;
+------+
| id |
+------+
| 1 |
| 3 |
| 2 |
+------+
3 rows in set (0.00 sec)
mysql [localhost:5726] {msandbox} (test) >
-----
mysql [localhost:5726] {msandbox} ((none)) > use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql [localhost:5726] {msandbox} (test) > show variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.01 sec)
mysql [localhost:5726] {msandbox} (test) > insert into ta values (2);
Query OK, 1 row affected (0.00 sec)
mysql [localhost:5726] {msandbox} (test) >
[18 Oct 2019 15:41]
Bill Okara
this seems to be similar as the issue as described in https://forums.mysql.com/read.php?22,678692,678692#msg-678692 (Repeatable Read update sees new value from another session) That is, the UPDATE WHERE clause seemed to be seeing the lastest committed vs the isolated version of a record.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.053 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.