Try this test case -
The call to PRINT_TRANSACTION_MESSAGE at the end of the test reveals a transaction log record for a change to col_int_not_null, despite that query dying due to ER_BAD_NULL_ERROR (1048)
--disable_warnings
DROP TABLE IF EXISTS A;
--enable_warnings
CREATE TABLE `a` (
`col_int` INT DEFAULT NULL,
`col_int_not_null` INT NOT NULL,
`col_int_not_null_key` INT NOT NULL,
`pk` INT NOT NULL AUTO_INCREMENT,
`col_int_key` INT DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_not_null_key` (`col_int_not_null_key`),
KEY `col_int_key` (`col_int_key`)
) ENGINE=InnoDB COLLATE = utf8_general_ci;
INSERT INTO `a` VALUES (NULL,1,5,1,NULL);
INSERT INTO `a` VALUES (6,1,7,2,6);
INSERT INTO `a` VALUES (NULL,3,7,3,NULL);
INSERT INTO `a` VALUES (NULL,9,0,4,2);
INSERT INTO `a` VALUES (3,5,4,5,2);
INSERT INTO `a` VALUES (4,6,0,6,5);
INSERT INTO `a` VALUES (NULL,7,9,7,NULL);
INSERT INTO `a` VALUES (NULL,6,6,8,NULL);
INSERT INTO `a` VALUES (5,8,2,9,0);
INSERT INTO `a` VALUES (7,8,2,10,NULL);
INSERT INTO `a` VALUES (6,4,1,11,6);
INSERT INTO `a` VALUES (NULL,4,2,12,NULL);
BEGIN;
UPDATE a SET col_int = col_int + 1 WHERE col_int_not_null_key = 2;
--error 1048
UPDATE a SET col_int_not_null = col_int WHERE col_int_not_null_key = 2;
COMMIT;
SELECT * FROM a;
SELECT PRINT_TRANSACTION_MESSAGE('transaction.log',(select max(entry_offset) from DATA_DICTIONARY.TRANSACTION_LOG_TRANSACTIONS));
Try this test case - ON_MESSAGE at the end of the test reveals a transaction log record for a change to col_int_not_null, despite that query dying due to ER_BAD_NULL_ERROR (1048)
The call to PRINT_TRANSACTI
--disable_warnings
DROP TABLE IF EXISTS A;
--enable_warnings
CREATE TABLE `a` ( int_not_ null` INT NOT NULL, int_not_ null_key` INT NOT NULL, not_null_ key` (`col_int_ not_null_ key`),
`col_int` INT DEFAULT NULL,
`col_
`col_
`pk` INT NOT NULL AUTO_INCREMENT,
`col_int_key` INT DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_
KEY `col_int_key` (`col_int_key`)
) ENGINE=InnoDB COLLATE = utf8_general_ci;
INSERT INTO `a` VALUES (NULL,1,5,1,NULL);
INSERT INTO `a` VALUES (6,1,7,2,6);
INSERT INTO `a` VALUES (NULL,3,7,3,NULL);
INSERT INTO `a` VALUES (NULL,9,0,4,2);
INSERT INTO `a` VALUES (3,5,4,5,2);
INSERT INTO `a` VALUES (4,6,0,6,5);
INSERT INTO `a` VALUES (NULL,7,9,7,NULL);
INSERT INTO `a` VALUES (NULL,6,6,8,NULL);
INSERT INTO `a` VALUES (5,8,2,9,0);
INSERT INTO `a` VALUES (7,8,2,10,NULL);
INSERT INTO `a` VALUES (6,4,1,11,6);
INSERT INTO `a` VALUES (NULL,4,2,12,NULL);
BEGIN; not_null_ key = 2; not_null_ key = 2;
UPDATE a SET col_int = col_int + 1 WHERE col_int_
--error 1048
UPDATE a SET col_int_not_null = col_int WHERE col_int_
COMMIT;
SELECT * FROM a;
SELECT PRINT_TRANSACTI ON_MESSAGE( 'transaction. log',(select max(entry_offset) from DATA_DICTIONARY .TRANSACTION_ LOG_TRANSACTION S));
DROP TABLE a;