Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-18141

Unexpected ER_KEY_NOT_FOUND upon REPLACE into table with foreign key with statement binary logging

    XMLWordPrintable

Details

    Description

      --source include/have_innodb.inc
      --source include/have_log_bin.inc
      --source include/have_binlog_format_mixed.inc
       
      CREATE TABLE t1 (f1 INT, f2 INT, PRIMARY KEY (f1), UNIQUE(f2), FOREIGN KEY (f1) REFERENCES t1 (f2)) ENGINE=InnoDB;
      REPLACE INTO t1 VALUES (1,1),(2,2);
       
      # Cleanup
      DROP TABLE t1;
      

      The test case above produces error 1032 (ER_KEY_NOT_FOUND):

      Actual result

      mysqltest: At line 6: query 'REPLACE INTO t1 VALUES (1,1),(2,2)' failed: 1032: Can't find record in 't1'
      

      which is also written as an error in the error log.

      Normally you would expect a different error, ER_NO_REFERENCED_ROW_2:

      Expected result

      mysqltest: At line 6: query 'REPLACE INTO t1 VALUES (1,1),(2,2)' failed: 1452: Cannot add or update a child row: a foreign key constraint fails (`test`.`t1`, CONSTRAINT `t1_ibfk_1` FOREIGN KEY (`f1`) REFERENCES `t1` (`f2`))
      

      which is also not very intuitive, but eventually understandable.

      MariaDB 5.5-10.1 and MySQL 5.6/5.7 produce ER_NO_REFERENCED_ROW_2 for the same test case.

      MariaDB 10.2+ produces ER_NO_REFERENCED_ROW_2 if the binary log is not enabled, or the logging format is ROW, or INSERT is run instead of REPLACE.

      Attachments

        Issue Links

          Activity

            People

              marko Marko Mäkelä
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.