mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
92b2a911e5
In MDEV-515, we enabled an optimization where an insert into an empty table will use table-level locking and undo logging. This may break applications that expect row-level locking. The SQL statements created by the mysqldump utility will include the following: SET unique_checks=0, foreign_key_checks=0; We will use these flags to enable the table-level locked and logged insert. Unless the parameters are set, INSERT will be executed in the old way, with row-level undo logging and implicit record locks.
55 lines
1.1 KiB
SQL
55 lines
1.1 KiB
SQL
-- connect (con1,localhost,root,,)
|
|
-- connect (con2,localhost,root,,)
|
|
|
|
-- connection con1
|
|
# Enable MDEV-515 table-level undo logging for insert into empty table
|
|
SET foreign_key_checks=0, unique_checks=0;
|
|
SET autocommit=0;
|
|
SELECT * FROM t1 FOR UPDATE;
|
|
-- if ($con1_extra_sql_present) {
|
|
-- eval $con1_extra_sql
|
|
-- }
|
|
|
|
-- connection con2
|
|
# Enable MDEV-515 table-level undo logging for insert into empty table
|
|
SET foreign_key_checks=0, unique_checks=0;
|
|
SET autocommit=0;
|
|
SELECT * FROM t2 FOR UPDATE;
|
|
-- if ($con2_extra_sql_present) {
|
|
-- eval $con2_extra_sql
|
|
-- }
|
|
|
|
-- if ($con1_should_be_rolledback) {
|
|
-- connection con1
|
|
-- send
|
|
INSERT INTO t2 VALUES (0);
|
|
|
|
-- connection con2
|
|
INSERT INTO t1 VALUES (0);
|
|
ROLLBACK;
|
|
|
|
-- connection con1
|
|
-- error ER_LOCK_DEADLOCK
|
|
-- reap
|
|
-- }
|
|
# else
|
|
-- if (!$con1_should_be_rolledback) {
|
|
-- connection con2
|
|
-- send
|
|
INSERT INTO t1 VALUES (0);
|
|
|
|
-- connection con1
|
|
INSERT INTO t2 VALUES (0);
|
|
ROLLBACK;
|
|
|
|
-- connection con2
|
|
-- error ER_LOCK_DEADLOCK
|
|
-- reap
|
|
-- }
|
|
|
|
-- connection default
|
|
|
|
DELETE FROM t5_nontrans;
|
|
|
|
-- disconnect con1
|
|
-- disconnect con2
|