SET @max_row = 100; CREATE TABLE t1 ( f_int1 INTEGER, f_int2 INTEGER, f_char1 CHAR(10), f_char2 CHAR(10), f_charbig VARCHAR(1000)) PARTITION BY LIST(f_int1) (PARTITION part_4 VALUES IN (-4), PARTITION part_3 VALUES IN (-3), PARTITION part_2 VALUES IN (-2), PARTITION part_1 VALUES IN (-1), PARTITION part0 VALUES IN (0), PARTITION part1 VALUES IN (1), PARTITION part2 VALUES IN (2), PARTITION part3 VALUES IN (3), PARTITION part4 VALUES IN (4)); # INSERT with use of @max_row works. INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR); DELETE FROM t1 WHERE f_int1 IS NULL; SHOW CREATE TABLE t1; --disable_abort_on_error # This ADD PRIMARY KEY is expected to fail, because it does not # contain the column f_int1 used within partitioning function. ALTER TABLE t1 ADD PRIMARY KEY(f_int2); # Here comes rotten output. SHOW CREATE TABLE t1; # This INSERT has to be successful, but fails INSERT INTO t1 SET f_int1 = NULL , f_int2 = - 100, f_char1 = CAST(- 100 AS CHAR), f_char2 = CAST(- 100 AS CHAR); DELETE FROM t1 WHERE f_int1 IS NULL; # This INSERT has to be successful, but causes a crash INSERT INTO t1 SET f_int1 = NULL , f_int2 = -@max_row, f_char1 = CAST(-@max_row AS CHAR), f_char2 = CAST(-@max_row AS CHAR);