Bug #80052 | SET NULL does not work, but CASCADE is OK | ||
---|---|---|---|
Submitted: | 19 Jan 2016 16:09 | Modified: | 10 Mar 2016 6:10 |
Reporter: | David Lobron | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server: DDL | Severity: | S3 (Non-critical) |
Version: | 5.5/5.6/5.7 | OS: | MacOS (10.10.3) |
Assigned to: | CPU Architecture: | Any | |
Tags: | cascade, set null, SQL |
[19 Jan 2016 16:09]
David Lobron
[27 Jan 2016 15:19]
MySQL Verification Team
Not repeatable with 5.0 and 5.1 version. Looks like the issue exists from 5.5 to 5.7 version. C:\dbs>c:\dbs\5.0\bin\mysql -uroot --port=3500 --prompt="mysql 5.0 > " Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.97-Win X64 Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.0 > CREATE DATABASE IF NOT EXISTS chugbot_db COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec) mysql 5.0 > mysql 5.0 > USE chugbot_db; Database changed mysql 5.0 > mysql 5.0 > CREATE TABLE sessions( -> session_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_sessions(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.0 > mysql 5.0 > CREATE TABLE blocks( -> block_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_blocks(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.0 > mysql 5.0 > CREATE TABLE edot( -> edah_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_edot(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.0 > mysql 5.0 > CREATE TABLE campers( -> camper_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> edah_id int, -> FOREIGN KEY fk_edah_id(edah_id) REFERENCES edot(edah_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> first varchar(50) NOT NULL, -> last varchar(50) NOT NULL, -> email varchar(50) NOT NULL, -> needs_first_choice bool DEFAULT 0, -> active bool NOT NULL DEFAULT 1) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.0 > mysql 5.0 > CREATE TABLE block_instances( -> block_id int NOT NULL, -> FOREIGN KEY fk_block_id(block_id) REFERENCES blocks(block_id) -> ON DELETE CASCADE -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> PRIMARY KEY pk_block_instances(block_id, session_id)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.0 > C:\dbs>c:\dbs\5.1\bin\mysql -uroot --port=3510 --debug-info --prompt="mysql 5.1 > " Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.74-Win X64 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.1 > CREATE DATABASE IF NOT EXISTS chugbot_db COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec) mysql 5.1 > mysql 5.1 > USE chugbot_db; Database changed mysql 5.1 > mysql 5.1 > CREATE TABLE sessions( -> session_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_sessions(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.1 > mysql 5.1 > CREATE TABLE blocks( -> block_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_blocks(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.1 > mysql 5.1 > CREATE TABLE edot( -> edah_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_edot(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.1 > mysql 5.1 > CREATE TABLE campers( -> camper_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> edah_id int, -> FOREIGN KEY fk_edah_id(edah_id) REFERENCES edot(edah_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> first varchar(50) NOT NULL, -> last varchar(50) NOT NULL, -> email varchar(50) NOT NULL, -> needs_first_choice bool DEFAULT 0, -> active bool NOT NULL DEFAULT 1) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.1 > mysql 5.1 > CREATE TABLE block_instances( -> block_id int NOT NULL, -> FOREIGN KEY fk_block_id(block_id) REFERENCES blocks(block_id) -> ON DELETE CASCADE -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> PRIMARY KEY pk_block_instances(block_id, session_id)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec)
[27 Jan 2016 15:25]
MySQL Verification Team
Thank you for the bug report. Affected version: 5.5/5.6/5.7: C:\dbs>c:\dbs\5.5\bin\mysql -uroot --port=3550 --prompt="mysql 5.5 > " Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.5.49 Source distribution PULL: 2016-JAN-14 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.5 > CREATE DATABASE IF NOT EXISTS chugbot_db COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec) mysql 5.5 > mysql 5.5 > USE chugbot_db; Database changed mysql 5.5 > mysql 5.5 > CREATE TABLE sessions( -> session_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_sessions(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.5 > mysql 5.5 > CREATE TABLE blocks( -> block_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_blocks(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.5 > mysql 5.5 > CREATE TABLE edot( -> edah_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_edot(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.5 > mysql 5.5 > CREATE TABLE campers( -> camper_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> edah_id int, -> FOREIGN KEY fk_edah_id(edah_id) REFERENCES edot(edah_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> first varchar(50) NOT NULL, -> last varchar(50) NOT NULL, -> email varchar(50) NOT NULL, -> needs_first_choice bool DEFAULT 0, -> active bool NOT NULL DEFAULT 1) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.01 sec) mysql 5.5 > mysql 5.5 > CREATE TABLE block_instances( -> block_id int NOT NULL, -> FOREIGN KEY fk_block_id(block_id) REFERENCES blocks(block_id) -> ON DELETE CASCADE -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> PRIMARY KEY pk_block_instances(block_id, session_id)) -> COLLATE utf8_unicode_ci; ERROR 1005 (HY000): Can't create table 'chugbot_db.block_instances' (errno: 150) C:\dbs>c:\dbs\5.6\bin\mysql -uroot --port=3560 -p --prompt="mysql 5.6 > " Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.30 Source distribution PULL: 2016-JAN-14 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.6 > CREATE DATABASE IF NOT EXISTS chugbot_db COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec) mysql 5.6 > mysql 5.6 > USE chugbot_db; Database changed mysql 5.6 > mysql 5.6 > CREATE TABLE sessions( -> session_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_sessions(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.03 sec) mysql 5.6 > mysql 5.6 > CREATE TABLE blocks( -> block_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_blocks(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.03 sec) mysql 5.6 > mysql 5.6 > CREATE TABLE edot( -> edah_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_edot(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.03 sec) mysql 5.6 > mysql 5.6 > CREATE TABLE campers( -> camper_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> edah_id int, -> FOREIGN KEY fk_edah_id(edah_id) REFERENCES edot(edah_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> first varchar(50) NOT NULL, -> last varchar(50) NOT NULL, -> email varchar(50) NOT NULL, -> needs_first_choice bool DEFAULT 0, -> active bool NOT NULL DEFAULT 1) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.03 sec) mysql 5.6 > mysql 5.6 > CREATE TABLE block_instances( -> block_id int NOT NULL, -> FOREIGN KEY fk_block_id(block_id) REFERENCES blocks(block_id) -> ON DELETE CASCADE -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> PRIMARY KEY pk_block_instances(block_id, session_id)) -> COLLATE utf8_unicode_ci; ERROR 1215 (HY000): Cannot add foreign key constraint C:\dbs>c:\dbs\5.7\bin\mysql -uroot -p --port=3570 --prompt="mysql 5.7 > " Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.12 Source distribution PULL: 2016-JAN-14 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.7 > CREATE DATABASE IF NOT EXISTS chugbot_db COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec) mysql 5.7 > mysql 5.7 > USE chugbot_db; Database changed mysql 5.7 > mysql 5.7 > CREATE TABLE sessions( -> session_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_sessions(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.03 sec) mysql 5.7 > mysql 5.7 > CREATE TABLE blocks( -> block_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_blocks(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.03 sec) mysql 5.7 > mysql 5.7 > CREATE TABLE edot( -> edah_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name varchar(50) NOT NULL, -> UNIQUE KEY uk_edot(name)) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.03 sec) mysql 5.7 > mysql 5.7 > CREATE TABLE campers( -> camper_id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> edah_id int, -> FOREIGN KEY fk_edah_id(edah_id) REFERENCES edot(edah_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> first varchar(50) NOT NULL, -> last varchar(50) NOT NULL, -> email varchar(50) NOT NULL, -> needs_first_choice bool DEFAULT 0, -> active bool NOT NULL DEFAULT 1) -> COLLATE utf8_unicode_ci; Query OK, 0 rows affected (0.05 sec) mysql 5.7 > mysql 5.7 > CREATE TABLE block_instances( -> block_id int NOT NULL, -> FOREIGN KEY fk_block_id(block_id) REFERENCES blocks(block_id) -> ON DELETE CASCADE -> ON UPDATE CASCADE, -> session_id int, -> FOREIGN KEY fk_session_id(session_id) REFERENCES sessions(session_id) -> ON DELETE SET NULL -> ON UPDATE CASCADE, -> PRIMARY KEY pk_block_instances(block_id, session_id)) -> COLLATE utf8_unicode_ci; ERROR 1215 (HY000): Cannot add foreign key constraint mysql 5.7 >
[10 Mar 2016 6:10]
Karthik Kamath Koteshwar
Here an error is being reported when a SET NULL constraint is applied for a Foreign key when the Foreign key column is used as a Primary key. This is an expected behaviour beacause a Primary Key cannot have a NULL value. Hence closing it as 'not a bug'.