mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	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
 |