Skip to content
264 changes: 264 additions & 0 deletions mysql-test/r/foreign_key_multi_table_dml.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
#
# Multi-table DELETE with ON DELETE CASCADE
#
CREATE TABLE t1(id INT PRIMARY KEY, i INT);
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 1), (4, 2), (5, 1), (6, 2), (7, 1);
CREATE TABLE t2(
id INT PRIMARY KEY,
t1_id INT,
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE
);
INSERT INTO t2 VALUES
(1, 1), (2, 1), (3, 1), (4, 1), (5, NULL), (6, 6), (7, 7), (8, 1), (9, 2),
(10, 3), (11, 4), (12, 5), (13, 6), (14, 7), (15, 1), (16, 2), (17, 3),
(18, 4), (19, 5), (20, 6), (21, 7), (22, NULL), (23, 1), (24, 2), (25, 3);
ANALYZE TABLE t1, t2;
Table Op Msg_type Msg_text
test.t1 analyze status OK
test.t2 analyze status OK
DELETE t1 FROM t1, t2 WHERE t1.i = t2.id;
SELECT * FROM t1 ORDER BY id;
id i
SELECT * FROM t2 ORDER BY id;
id t1_id
5 NULL
22 NULL
DROP TABLE t2, t1;
#
# Multi-table DELETE with ON DELETE SET NULL
#
CREATE TABLE t1(id INT PRIMARY KEY, i INT);
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 1), (4, 2), (5, 1), (6, 2), (7, 1);
CREATE TABLE t2(
id INT PRIMARY KEY,
t1_id INT,
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE SET NULL
);
INSERT INTO t2 VALUES
(1, 1), (2, 1), (3, 1), (4, 1), (5, NULL), (6, 6), (7, 7), (8, 1), (9, 2),
(10, 3), (11, 4), (12, 5), (13, 6), (14, 7), (15, 1), (16, 2), (17, 3),
(18, 4), (19, 5), (20, 6), (21, 7), (22, NULL), (23, 1), (24, 2), (25, 3);
ANALYZE TABLE t1, t2;
Table Op Msg_type Msg_text
test.t1 analyze status OK
test.t2 analyze status OK
DELETE t1 FROM t1, t2 WHERE t1.i = t2.id AND t1_id IS NOT NULL;
SELECT * FROM t1 ORDER BY id;
id i
SELECT * FROM t2 ORDER BY id;
id t1_id
1 NULL
2 NULL
3 NULL
4 NULL
5 NULL
6 NULL
7 NULL
8 NULL
9 NULL
10 NULL
11 NULL
12 NULL
13 NULL
14 NULL
15 NULL
16 NULL
17 NULL
18 NULL
19 NULL
20 NULL
21 NULL
22 NULL
23 NULL
24 NULL
25 NULL
DROP TABLE t2, t1;
#
# Multi-table DELETE cascading through a table that is not in the query
#
CREATE TABLE t1(id INT PRIMARY KEY, i INT);
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 1), (4, 2), (5, 1), (6, 2), (7, 1);
CREATE TABLE t_mid(
id INT PRIMARY KEY,
t1_id INT,
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE
);
INSERT INTO t_mid VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6),
(7, 7);
CREATE TABLE t3(
id INT PRIMARY KEY,
mid_id INT,
FOREIGN KEY (mid_id) REFERENCES t_mid(id) ON DELETE CASCADE
);
INSERT INTO t3 VALUES
(1, 1), (2, 1), (3, 1), (4, 1), (5, NULL), (6, 6), (7, 7), (8, 1), (9, 2),
(10, 3), (11, 4), (12, 5), (13, 6), (14, 7), (15, 1), (16, 2), (17, 3),
(18, 4), (19, 5), (20, 6), (21, 7), (22, NULL), (23, 1), (24, 2), (25, 3);
ANALYZE TABLE t1, t_mid, t3;
Table Op Msg_type Msg_text
test.t1 analyze status OK
test.t_mid analyze status OK
test.t3 analyze status OK
DELETE t1 FROM t1, t3 WHERE t1.i = t3.id;
SELECT * FROM t1 ORDER BY id;
id i
SELECT * FROM t_mid ORDER BY id;
id t1_id
SELECT * FROM t3 ORDER BY id;
id mid_id
5 NULL
22 NULL
DROP TABLE t3, t_mid, t1;
#
# Multi-table DELETE reaching a table through both a delete path and
# an update path in a diamond-shaped foreign key graph
#
CREATE TABLE root(id INT PRIMARY KEY, i INT);
INSERT INTO root VALUES (1, 2), (2, 1);
CREATE TABLE a_update(
id INT PRIMARY KEY,
root_id INT UNIQUE,
FOREIGN KEY (root_id) REFERENCES root(id) ON DELETE SET NULL
);
INSERT INTO a_update VALUES (1, 1), (2, 2);
CREATE TABLE z_delete(
id INT PRIMARY KEY,
root_id INT,
FOREIGN KEY (root_id) REFERENCES root(id) ON DELETE CASCADE
);
INSERT INTO z_delete VALUES (1, 1);
CREATE TABLE common_child(
id INT PRIMARY KEY,
a_ref INT UNIQUE,
z_ref INT,
FOREIGN KEY (a_ref) REFERENCES a_update(root_id) ON UPDATE CASCADE,
FOREIGN KEY (z_ref) REFERENCES z_delete(id) ON DELETE CASCADE
);
INSERT INTO common_child VALUES (1, 1, NULL), (2, NULL, 1), (3, 2, NULL);
CREATE TABLE query_child(
id INT PRIMARY KEY,
common_ref INT,
FOREIGN KEY (common_ref) REFERENCES common_child(a_ref) ON UPDATE CASCADE
);
INSERT INTO query_child VALUES
(1, 1), (2, 2), (3, NULL), (4, NULL), (5, NULL), (6, NULL), (7, NULL),
(8, NULL), (9, NULL), (10, NULL), (11, NULL), (12, NULL), (13, NULL),
(14, NULL), (15, NULL), (16, NULL), (17, NULL), (18, NULL), (19, NULL),
(20, NULL), (21, NULL), (22, NULL), (23, NULL), (24, NULL), (25, NULL);
ANALYZE TABLE root, a_update, z_delete, common_child, query_child;
Table Op Msg_type Msg_text
test.root analyze status OK
test.a_update analyze status OK
test.z_delete analyze status OK
test.common_child analyze status OK
test.query_child analyze status OK
DELETE root FROM root JOIN query_child ON root.i = query_child.common_ref;
SELECT * FROM root ORDER BY id;
id i
DROP TABLE query_child, common_child, z_delete, a_update, root;
#
# Multi-table UPDATE with ON UPDATE SET NULL
#
CREATE TABLE t1(id INT PRIMARY KEY, u INT UNIQUE, i INT);
INSERT INTO t1 VALUES (1, 1, 2), (2, 2, 1);
CREATE TABLE t2(
id INT PRIMARY KEY,
t1_u INT,
FOREIGN KEY (t1_u) REFERENCES t1(u) ON UPDATE SET NULL
);
INSERT INTO t2 VALUES
(1, 1), (2, 2), (3, NULL), (4, NULL), (5, NULL), (6, NULL), (7, NULL),
(8, NULL), (9, NULL), (10, NULL), (11, NULL), (12, NULL), (13, NULL),
(14, NULL), (15, NULL), (16, NULL), (17, NULL), (18, NULL), (19, NULL),
(20, NULL), (21, NULL), (22, NULL), (23, NULL), (24, NULL), (25, NULL);
ANALYZE TABLE t1, t2;
Table Op Msg_type Msg_text
test.t1 analyze status OK
test.t2 analyze status OK
UPDATE t1 JOIN t2 ON t1.i = t2.t1_u
SET t1.u = t1.u + 10;
SELECT * FROM t1 ORDER BY id;
id u i
1 11 2
2 12 1
SELECT * FROM t2 ORDER BY id;
id t1_u
1 NULL
2 NULL
3 NULL
4 NULL
5 NULL
6 NULL
7 NULL
8 NULL
9 NULL
10 NULL
11 NULL
12 NULL
13 NULL
14 NULL
15 NULL
16 NULL
17 NULL
18 NULL
19 NULL
20 NULL
21 NULL
22 NULL
23 NULL
24 NULL
25 NULL
DROP TABLE t2, t1;
#
# Multi-table UPDATE with ON UPDATE CASCADE
#
CREATE TABLE t1(id INT PRIMARY KEY, u INT UNIQUE, i INT);
INSERT INTO t1 VALUES (1, 1, 2), (2, 2, 1);
CREATE TABLE t2(
id INT PRIMARY KEY,
t1_u INT,
FOREIGN KEY (t1_u) REFERENCES t1(u) ON UPDATE CASCADE
);
INSERT INTO t2 VALUES
(1, 1), (2, 2), (3, NULL), (4, NULL), (5, NULL), (6, NULL), (7, NULL),
(8, NULL), (9, NULL), (10, NULL), (11, NULL), (12, NULL), (13, NULL),
(14, NULL), (15, NULL), (16, NULL), (17, NULL), (18, NULL), (19, NULL),
(20, NULL), (21, NULL), (22, NULL), (23, NULL), (24, NULL), (25, NULL);
ANALYZE TABLE t1, t2;
Table Op Msg_type Msg_text
test.t1 analyze status OK
test.t2 analyze status OK
UPDATE t1 JOIN t2 ON t1.i = t2.t1_u
SET t1.u = t1.u + 10;
SELECT * FROM t1 ORDER BY id;
id u i
1 11 2
2 12 1
SELECT * FROM t2 ORDER BY id;
id t1_u
1 11
2 12
3 NULL
4 NULL
5 NULL
6 NULL
7 NULL
8 NULL
9 NULL
10 NULL
11 NULL
12 NULL
13 NULL
14 NULL
15 NULL
16 NULL
17 NULL
18 NULL
19 NULL
20 NULL
21 NULL
22 NULL
23 NULL
24 NULL
25 NULL
DROP TABLE t2, t1;
Loading
Loading