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

Triangular FKs - Cascade delete causes broken referential integrity

Details

    Description

      See SQL test case below for detail. See this thread for problem discovery:
      https://lists.launchpad.net/maria-developers/msg11102.html

      For a "triangular" table FK structure (see attached png visual) deleting parent record, should delete both children, but the ON DELETE CASCADE does not delete record in 2nd child table when 2nd child has ON DELETE SET NULL constraint to 1st child

      Referential integrity is broken after parent is deleted. LEFT JOINs do not show broken FK.

      MySQL 5.7.21 and MariaDB 10.1.30 do not exhibit this broken behaviour.

      -- Server version: 10.2.12-MariaDB FreeBSD Ports
       
      -- setup DB structure
       
      SET FOREIGN_KEY_CHECKS=0;
       
      CREATE TABLE member (
        id int(11) NOT NULL AUTO_INCREMENT,
        PRIMARY KEY (id)
      ) ENGINE=InnoDB;
       
      INSERT INTO member VALUES (1);
       
      CREATE TABLE address (
        id int(11) NOT NULL AUTO_INCREMENT,
        member_id int(11) NOT NULL,
        PRIMARY KEY (id),
        KEY address_FI_1 (member_id),
        CONSTRAINT address_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE
      ) ENGINE=InnoDB;
       
      INSERT INTO address VALUES (2,1);
       
      CREATE TABLE payment_method (
        id int(11) NOT NULL AUTO_INCREMENT,
        member_id int(11) NOT NULL,
        cardholder_address_id int(11) DEFAULT NULL,
        PRIMARY KEY (id),
        KEY payment_method_FI_1 (member_id),
        KEY payment_method_FI_2 (cardholder_address_id),
        CONSTRAINT payment_method_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE,
        CONSTRAINT payment_method_FK_2 FOREIGN KEY (cardholder_address_id) REFERENCES address (id) ON DELETE SET NULL ON UPDATE CASCADE
      ) ENGINE=InnoDB;
       
      INSERT INTO payment_method VALUES (3,1,2);
       
      SET FOREIGN_KEY_CHECKS=1;
       
      -- show inserted data
       
      SELECT * FROM member;
      +----+
      | id |
      +----+
      |  1 |
      +----+
       
      SELECT * FROM address;
      +----+-----------+
      | id | member_id |
      +----+-----------+
      |  2 |         1 |
      +----+-----------+
       
      SELECT * FROM payment_method;
      +----+-----------+-----------------------+
      | id | member_id | cardholder_address_id |
      +----+-----------+-----------------------+
      |  3 |         1 |                     2 |
      +----+-----------+-----------------------+
       
      -- finished setup now delete the central `member` record 
      DELETE FROM member WHERE id = 1;
       
      -- check the resulting state
       
      SELECT * FROM member;
      -- empty set, correct
       
      SELECT * FROM address;
      -- empty set, correct
       
      SELECT * FROM payment_method;
      +----+-----------+-----------------------+
      | id | member_id | cardholder_address_id |
      +----+-----------+-----------------------+
      |  3 |         1 |                  NULL |
      +----+-----------+-----------------------+
      -- should be an empty set
      -- referential integrity is broken: payment_method.member_id references a non-existent member.id
       
      -- inconsistency continues during subsequent left join queries
       
      SELECT
        payment_method.id, member_id
      FROM
        payment_method
      LEFT JOIN
        member ON member.id=payment_method.member_id
      WHERE
        payment_method.member_id IS NOT NULL AND member.id IS NULL;
       
      --  empty set, when it should not be
      -- note that if you dump and insert the broken DB, then above left join DOES show the broken FK, which is how I discovered it
      

      Attachments

        Issue Links

          Activity

            oschonrock Oliver Schonrock created issue -
            oschonrock Oliver Schonrock made changes -
            Field Original Value New Value
            Labels delete foreign-keys delete foreign-keys innodb
            oschonrock Oliver Schonrock made changes -
            Description See SQL test case below for detail.

            For a "triangular" table FK structure (see attached png visual) deleting parent record, should delete both children, but the ON DELETE CASCADE does not delete record in 2nd child table when 2nd child has ON DELETE SET NULL constraint to 1st child

            Referential integrity is broken after parent is deleted. LEFT JOINs do not show broken FK.

            MySQL 5.7.21 and MariaDB 10.1.30 do not exhibit this broken behaviour.

            {code:sql}
            -- Server version: 10.2.12-MariaDB FreeBSD Ports

            -- setup DB structure

            SET FOREIGN_KEY_CHECKS=0;

            CREATE TABLE member (
              id int(11) NOT NULL AUTO_INCREMENT,
              PRIMARY KEY (id)
            ) ENGINE=InnoDB;

            INSERT INTO member VALUES (1);

            CREATE TABLE address (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              PRIMARY KEY (id),
              KEY address_FI_1 (member_id),
              CONSTRAINT address_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO address VALUES (2,1);

            CREATE TABLE payment_method (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              cardholder_address_id int(11) DEFAULT NULL,
              PRIMARY KEY (id),
              KEY payment_method_FI_1 (member_id),
              KEY payment_method_FI_2 (cardholder_address_id),
              CONSTRAINT payment_method_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE,
              CONSTRAINT payment_method_FK_2 FOREIGN KEY (cardholder_address_id) REFERENCES address (id) ON DELETE SET NULL ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO payment_method VALUES (3,1,2);

            SET FOREIGN_KEY_CHECKS=1;

            -- show inserted data

            SELECT * FROM member;
            +----+
            | id |
            +----+
            | 1 |
            +----+

            SELECT * FROM address;
            +----+-----------+
            | id | member_id |
            +----+-----------+
            | 2 | 1 |
            +----+-----------+

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | 2 |
            +----+-----------+-----------------------+

            -- finished setup now delete the central `member` record
            DELETE FROM member WHERE id = 1;

            -- check the resulting state

            SELECT * FROM member;
            -- empty set, correct

            SELECT * FROM address;
            -- empty set, correct

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | NULL |
            +----+-----------+-----------------------+
            -- should be an empty set

            -- inconsistency continues during subsequent left join queries

            SELECT
              payment_method.id, member_id
            FROM
              payment_method
            LEFT JOIN
              member ON member.id=payment_method.member_id
            WHERE
              payment_method.member_id IS NOT NULL AND member.id IS NULL;

            -- empty set, when it should not be
            {code}
            See SQL test case below for detail.

            For a "triangular" table FK structure (see attached png visual) deleting parent record, should delete both children, but the ON DELETE CASCADE does not delete record in 2nd child table when 2nd child has ON DELETE SET NULL constraint to 1st child

            Referential integrity is broken after parent is deleted. LEFT JOINs do not show broken FK.

            MySQL 5.7.21 and MariaDB 10.1.30 do not exhibit this broken behaviour.

            {code:sql}
            -- Server version: 10.2.12-MariaDB FreeBSD Ports

            -- setup DB structure

            SET FOREIGN_KEY_CHECKS=0;

            CREATE TABLE member (
              id int(11) NOT NULL AUTO_INCREMENT,
              PRIMARY KEY (id)
            ) ENGINE=InnoDB;

            INSERT INTO member VALUES (1);

            CREATE TABLE address (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              PRIMARY KEY (id),
              KEY address_FI_1 (member_id),
              CONSTRAINT address_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO address VALUES (2,1);

            CREATE TABLE payment_method (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              cardholder_address_id int(11) DEFAULT NULL,
              PRIMARY KEY (id),
              KEY payment_method_FI_1 (member_id),
              KEY payment_method_FI_2 (cardholder_address_id),
              CONSTRAINT payment_method_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE,
              CONSTRAINT payment_method_FK_2 FOREIGN KEY (cardholder_address_id) REFERENCES address (id) ON DELETE SET NULL ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO payment_method VALUES (3,1,2);

            SET FOREIGN_KEY_CHECKS=1;

            -- show inserted data

            SELECT * FROM member;
            +----+
            | id |
            +----+
            | 1 |
            +----+

            SELECT * FROM address;
            +----+-----------+
            | id | member_id |
            +----+-----------+
            | 2 | 1 |
            +----+-----------+

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | 2 |
            +----+-----------+-----------------------+

            -- finished setup now delete the central `member` record
            DELETE FROM member WHERE id = 1;

            -- check the resulting state

            SELECT * FROM member;
            -- empty set, correct

            SELECT * FROM address;
            -- empty set, correct

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | NULL |
            +----+-----------+-----------------------+
            -- should be an empty set
            -- referential integrity is broken: payment_method.member_id references a non-existent member.id

            -- inconsistency continues during subsequent left join queries

            SELECT
              payment_method.id, member_id
            FROM
              payment_method
            LEFT JOIN
              member ON member.id=payment_method.member_id
            WHERE
              payment_method.member_id IS NOT NULL AND member.id IS NULL;

            -- empty set, when it should not be
            {code}
            oschonrock Oliver Schonrock made changes -
            Description See SQL test case below for detail.

            For a "triangular" table FK structure (see attached png visual) deleting parent record, should delete both children, but the ON DELETE CASCADE does not delete record in 2nd child table when 2nd child has ON DELETE SET NULL constraint to 1st child

            Referential integrity is broken after parent is deleted. LEFT JOINs do not show broken FK.

            MySQL 5.7.21 and MariaDB 10.1.30 do not exhibit this broken behaviour.

            {code:sql}
            -- Server version: 10.2.12-MariaDB FreeBSD Ports

            -- setup DB structure

            SET FOREIGN_KEY_CHECKS=0;

            CREATE TABLE member (
              id int(11) NOT NULL AUTO_INCREMENT,
              PRIMARY KEY (id)
            ) ENGINE=InnoDB;

            INSERT INTO member VALUES (1);

            CREATE TABLE address (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              PRIMARY KEY (id),
              KEY address_FI_1 (member_id),
              CONSTRAINT address_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO address VALUES (2,1);

            CREATE TABLE payment_method (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              cardholder_address_id int(11) DEFAULT NULL,
              PRIMARY KEY (id),
              KEY payment_method_FI_1 (member_id),
              KEY payment_method_FI_2 (cardholder_address_id),
              CONSTRAINT payment_method_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE,
              CONSTRAINT payment_method_FK_2 FOREIGN KEY (cardholder_address_id) REFERENCES address (id) ON DELETE SET NULL ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO payment_method VALUES (3,1,2);

            SET FOREIGN_KEY_CHECKS=1;

            -- show inserted data

            SELECT * FROM member;
            +----+
            | id |
            +----+
            | 1 |
            +----+

            SELECT * FROM address;
            +----+-----------+
            | id | member_id |
            +----+-----------+
            | 2 | 1 |
            +----+-----------+

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | 2 |
            +----+-----------+-----------------------+

            -- finished setup now delete the central `member` record
            DELETE FROM member WHERE id = 1;

            -- check the resulting state

            SELECT * FROM member;
            -- empty set, correct

            SELECT * FROM address;
            -- empty set, correct

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | NULL |
            +----+-----------+-----------------------+
            -- should be an empty set
            -- referential integrity is broken: payment_method.member_id references a non-existent member.id

            -- inconsistency continues during subsequent left join queries

            SELECT
              payment_method.id, member_id
            FROM
              payment_method
            LEFT JOIN
              member ON member.id=payment_method.member_id
            WHERE
              payment_method.member_id IS NOT NULL AND member.id IS NULL;

            -- empty set, when it should not be
            {code}
            See SQL test case below for detail. See this thread for problem discovery:
            https://lists.launchpad.net/maria-developers/msg11102.html

            For a "triangular" table FK structure (see attached png visual) deleting parent record, should delete both children, but the ON DELETE CASCADE does not delete record in 2nd child table when 2nd child has ON DELETE SET NULL constraint to 1st child

            Referential integrity is broken after parent is deleted. LEFT JOINs do not show broken FK.

            MySQL 5.7.21 and MariaDB 10.1.30 do not exhibit this broken behaviour.

            {code:sql}
            -- Server version: 10.2.12-MariaDB FreeBSD Ports

            -- setup DB structure

            SET FOREIGN_KEY_CHECKS=0;

            CREATE TABLE member (
              id int(11) NOT NULL AUTO_INCREMENT,
              PRIMARY KEY (id)
            ) ENGINE=InnoDB;

            INSERT INTO member VALUES (1);

            CREATE TABLE address (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              PRIMARY KEY (id),
              KEY address_FI_1 (member_id),
              CONSTRAINT address_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO address VALUES (2,1);

            CREATE TABLE payment_method (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              cardholder_address_id int(11) DEFAULT NULL,
              PRIMARY KEY (id),
              KEY payment_method_FI_1 (member_id),
              KEY payment_method_FI_2 (cardholder_address_id),
              CONSTRAINT payment_method_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE,
              CONSTRAINT payment_method_FK_2 FOREIGN KEY (cardholder_address_id) REFERENCES address (id) ON DELETE SET NULL ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO payment_method VALUES (3,1,2);

            SET FOREIGN_KEY_CHECKS=1;

            -- show inserted data

            SELECT * FROM member;
            +----+
            | id |
            +----+
            | 1 |
            +----+

            SELECT * FROM address;
            +----+-----------+
            | id | member_id |
            +----+-----------+
            | 2 | 1 |
            +----+-----------+

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | 2 |
            +----+-----------+-----------------------+

            -- finished setup now delete the central `member` record
            DELETE FROM member WHERE id = 1;

            -- check the resulting state

            SELECT * FROM member;
            -- empty set, correct

            SELECT * FROM address;
            -- empty set, correct

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | NULL |
            +----+-----------+-----------------------+
            -- should be an empty set
            -- referential integrity is broken: payment_method.member_id references a non-existent member.id

            -- inconsistency continues during subsequent left join queries

            SELECT
              payment_method.id, member_id
            FROM
              payment_method
            LEFT JOIN
              member ON member.id=payment_method.member_id
            WHERE
              payment_method.member_id IS NOT NULL AND member.id IS NULL;

            -- empty set, when it should not be
            {code}
            oschonrock Oliver Schonrock made changes -
            Summary Triangular FKs - Cascade delete leaves DB in state with broken referential integrity Triangular FKs - Cascade delete causes broken referential integrity
            oschonrock Oliver Schonrock made changes -
            Description See SQL test case below for detail. See this thread for problem discovery:
            https://lists.launchpad.net/maria-developers/msg11102.html

            For a "triangular" table FK structure (see attached png visual) deleting parent record, should delete both children, but the ON DELETE CASCADE does not delete record in 2nd child table when 2nd child has ON DELETE SET NULL constraint to 1st child

            Referential integrity is broken after parent is deleted. LEFT JOINs do not show broken FK.

            MySQL 5.7.21 and MariaDB 10.1.30 do not exhibit this broken behaviour.

            {code:sql}
            -- Server version: 10.2.12-MariaDB FreeBSD Ports

            -- setup DB structure

            SET FOREIGN_KEY_CHECKS=0;

            CREATE TABLE member (
              id int(11) NOT NULL AUTO_INCREMENT,
              PRIMARY KEY (id)
            ) ENGINE=InnoDB;

            INSERT INTO member VALUES (1);

            CREATE TABLE address (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              PRIMARY KEY (id),
              KEY address_FI_1 (member_id),
              CONSTRAINT address_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO address VALUES (2,1);

            CREATE TABLE payment_method (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              cardholder_address_id int(11) DEFAULT NULL,
              PRIMARY KEY (id),
              KEY payment_method_FI_1 (member_id),
              KEY payment_method_FI_2 (cardholder_address_id),
              CONSTRAINT payment_method_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE,
              CONSTRAINT payment_method_FK_2 FOREIGN KEY (cardholder_address_id) REFERENCES address (id) ON DELETE SET NULL ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO payment_method VALUES (3,1,2);

            SET FOREIGN_KEY_CHECKS=1;

            -- show inserted data

            SELECT * FROM member;
            +----+
            | id |
            +----+
            | 1 |
            +----+

            SELECT * FROM address;
            +----+-----------+
            | id | member_id |
            +----+-----------+
            | 2 | 1 |
            +----+-----------+

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | 2 |
            +----+-----------+-----------------------+

            -- finished setup now delete the central `member` record
            DELETE FROM member WHERE id = 1;

            -- check the resulting state

            SELECT * FROM member;
            -- empty set, correct

            SELECT * FROM address;
            -- empty set, correct

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | NULL |
            +----+-----------+-----------------------+
            -- should be an empty set
            -- referential integrity is broken: payment_method.member_id references a non-existent member.id

            -- inconsistency continues during subsequent left join queries

            SELECT
              payment_method.id, member_id
            FROM
              payment_method
            LEFT JOIN
              member ON member.id=payment_method.member_id
            WHERE
              payment_method.member_id IS NOT NULL AND member.id IS NULL;

            -- empty set, when it should not be
            {code}
            See SQL test case below for detail. See this thread for problem discovery:
            https://lists.launchpad.net/maria-developers/msg11102.html

            For a "triangular" table FK structure (see attached png visual) deleting parent record, should delete both children, but the ON DELETE CASCADE does not delete record in 2nd child table when 2nd child has ON DELETE SET NULL constraint to 1st child

            Referential integrity is broken after parent is deleted. LEFT JOINs do not show broken FK.

            MySQL 5.7.21 and MariaDB 10.1.30 do not exhibit this broken behaviour.

            {code:sql}
            -- Server version: 10.2.12-MariaDB FreeBSD Ports

            -- setup DB structure

            SET FOREIGN_KEY_CHECKS=0;

            CREATE TABLE member (
              id int(11) NOT NULL AUTO_INCREMENT,
              PRIMARY KEY (id)
            ) ENGINE=InnoDB;

            INSERT INTO member VALUES (1);

            CREATE TABLE address (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              PRIMARY KEY (id),
              KEY address_FI_1 (member_id),
              CONSTRAINT address_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO address VALUES (2,1);

            CREATE TABLE payment_method (
              id int(11) NOT NULL AUTO_INCREMENT,
              member_id int(11) NOT NULL,
              cardholder_address_id int(11) DEFAULT NULL,
              PRIMARY KEY (id),
              KEY payment_method_FI_1 (member_id),
              KEY payment_method_FI_2 (cardholder_address_id),
              CONSTRAINT payment_method_FK_1 FOREIGN KEY (member_id) REFERENCES member (id) ON DELETE CASCADE ON UPDATE CASCADE,
              CONSTRAINT payment_method_FK_2 FOREIGN KEY (cardholder_address_id) REFERENCES address (id) ON DELETE SET NULL ON UPDATE CASCADE
            ) ENGINE=InnoDB;

            INSERT INTO payment_method VALUES (3,1,2);

            SET FOREIGN_KEY_CHECKS=1;

            -- show inserted data

            SELECT * FROM member;
            +----+
            | id |
            +----+
            | 1 |
            +----+

            SELECT * FROM address;
            +----+-----------+
            | id | member_id |
            +----+-----------+
            | 2 | 1 |
            +----+-----------+

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | 2 |
            +----+-----------+-----------------------+

            -- finished setup now delete the central `member` record
            DELETE FROM member WHERE id = 1;

            -- check the resulting state

            SELECT * FROM member;
            -- empty set, correct

            SELECT * FROM address;
            -- empty set, correct

            SELECT * FROM payment_method;
            +----+-----------+-----------------------+
            | id | member_id | cardholder_address_id |
            +----+-----------+-----------------------+
            | 3 | 1 | NULL |
            +----+-----------+-----------------------+
            -- should be an empty set
            -- referential integrity is broken: payment_method.member_id references a non-existent member.id

            -- inconsistency continues during subsequent left join queries

            SELECT
              payment_method.id, member_id
            FROM
              payment_method
            LEFT JOIN
              member ON member.id=payment_method.member_id
            WHERE
              payment_method.member_id IS NOT NULL AND member.id IS NULL;

            -- empty set, when it should not be
            -- note that if you dump and insert the broken DB, then above left join DOES show the broken FK, which is how I discovered it
            {code}
            elenst Elena Stepanova made changes -
            Fix Version/s 10.2 [ 14601 ]
            elenst Elena Stepanova made changes -
            Status Open [ 1 ] Confirmed [ 10101 ]
            elenst Elena Stepanova made changes -
            Assignee Marko Mäkelä [ marko ]
            marko Marko Mäkelä made changes -
            Labels delete foreign-keys innodb delete foreign-keys innodb upstream-fixed
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            Priority Major [ 3 ] Blocker [ 1 ]
            marko Marko Mäkelä made changes -
            Affects Version/s 10.3.0 [ 22127 ]
            Affects Version/s 10.2.2 [ 22013 ]
            Affects Version/s 10.2.12 [ 22810 ]
            marko Marko Mäkelä made changes -
            Fix Version/s 10.3.5 [ 22905 ]
            Fix Version/s 10.2.13 [ 22910 ]
            Fix Version/s 10.2 [ 14601 ]
            marko Marko Mäkelä made changes -
            Status Confirmed [ 10101 ] In Progress [ 3 ]
            marko Marko Mäkelä made changes -
            Resolution Fixed [ 1 ]
            Status In Progress [ 3 ] Closed [ 6 ]
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            marko Marko Mäkelä made changes -
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 85408 ] MariaDB v4 [ 153731 ]
            marko Marko Mäkelä made changes -

            People

              marko Marko Mäkelä
              oschonrock Oliver Schonrock
              Votes:
              1 Vote for this issue
              Watchers:
              5 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.