mirror of
https://github.com/MariaDB/server.git
synced 2025-02-02 12:01:42 +01:00
fef8e27a79
Bug #38839: auto increment does not work properly with InnoDB after update Detailed revision comments: r2609 | sunny | 2008-08-24 01:19:05 +0300 (Sun, 24 Aug 2008) | 12 lines branches/5.1: Fix for MySQL Bug#38839. Reset the statement level last value field in prebuilt. This field tracks the last value in an autoincrement interval. We use this value to check whether we need to update a table's AUTOINC counter, if the value written to a table is less than this value then we avoid updating the table's AUTOINC value in order to reduce mutex contention. If it's not reset (e.g., after a DELETE statement) then there is the possibility of missing updates to the table's AUTOINC counter resulting in a subsequent duplicate row error message under certain conditions (see the test case for details). Bug #38839 - auto increment does not work properly with InnoDB after update
198 lines
5.1 KiB
Text
198 lines
5.1 KiB
Text
drop table if exists t1;
|
|
CREATE TABLE t1 (c1 BIGINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (9223372036854775807, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
9223372036854775807 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 TINYINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (127, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
127 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (255, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
255 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 SMALLINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (32767, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
32767 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (65535, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
65535 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 MEDIUMINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (8388607, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
8388607 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 MEDIUMINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (16777215, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
16777215 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (2147483647, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
2147483647 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (4294967295, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
4294967295 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 BIGINT PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (9223372036854775807, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
9223372036854775807 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1 (c1 BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, c2 VARCHAR(10)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (18446744073709551615, null);
|
|
INSERT INTO t1 (c2) VALUES ('innodb');
|
|
Got one of the listed errors
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
18446744073709551615 NULL
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1(c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
c1
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
|
|
TRUNCATE TABLE t1;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
c1
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
|
|
DROP TABLE t1;
|
|
CREATE TABLE t1(c1 INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
c1
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
|
|
DELETE FROM t1;
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
|
|
INSERT INTO t1 VALUES (1), (2), (3);
|
|
INSERT INTO t1 VALUES (NULL), (NULL), (NULL);
|
|
SELECT c1 FROM t1;
|
|
c1
|
|
1
|
|
2
|
|
3
|
|
7
|
|
8
|
|
9
|
|
SHOW CREATE TABLE t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`c1` int(11) NOT NULL AUTO_INCREMENT,
|
|
PRIMARY KEY (`c1`)
|
|
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1
|
|
DROP TABLE t1;
|
|
DROP TABLE IF EXISTS t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 't1'
|
|
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (NULL, 1);
|
|
DELETE FROM t1 WHERE c1 = 1;
|
|
INSERT INTO t1 VALUES (2,1);
|
|
INSERT INTO t1 VALUES (NULL,8);
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
2 1
|
|
3 8
|
|
DROP TABLE t1;
|
|
DROP TABLE IF EXISTS t1;
|
|
Warnings:
|
|
Note 1051 Unknown table 't1'
|
|
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
|
INSERT INTO t1 VALUES (NULL, 1);
|
|
DELETE FROM t1 WHERE c1 = 1;
|
|
INSERT INTO t1 VALUES (2,1), (NULL, 8);
|
|
INSERT INTO t1 VALUES (NULL,9);
|
|
SELECT * FROM t1;
|
|
c1 c2
|
|
2 1
|
|
3 8
|
|
5 9
|
|
DROP TABLE t1;
|