MySQL 8 NULL 外键
MySQL 8 NULL foreign key
我正在创建一些新的 tables,我想用测试数据填充它们,我遇到了 mysql 8 的这个问题。
我一直在 table 上使用空 FK,但现在我不知道发生了什么。
我认为是 mysql 8 的东西,我最近更新了,直到现在我都没有遇到问题。
我正在使用 8.0.12。
我得到的错误是:
[23000][1452] Cannot add or update a child row: a foreign key
constraint fails (i2cwac_test
.site_board_pins
, CONSTRAINT
site_board_pins_sensor_types_id_fk
FOREIGN KEY (id
) REFERENCES
sensor_types
(id
))
table 创建脚本:
CREATE TABLE site_board_pins
(
id bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT,
site_board_id bigint(20) NOT NULL,
e_board_pin_id bigint(20) NOT NULL,
pin_type_id bigint(20) NOT NULL,
pin_operation_mode bigint(20) NULL,
sensor_type_id bigint(20) NULL,
enabled bit(1) NOT NULL ,
description varchar(500),
CONSTRAINT site_board_pins_site_boards_id_fk FOREIGN KEY (id) REFERENCES site_boards (id),
CONSTRAINT site_board_pins_e_board_pins_id_fk FOREIGN KEY (id) REFERENCES e_board_pins (id),
CONSTRAINT site_board_pins_pin_types_id_fk FOREIGN KEY (id) REFERENCES pin_types (id),
CONSTRAINT site_board_pins_pin_operation_mode_id_fk FOREIGN KEY (id) REFERENCES pin_operation_mode (id),
CONSTRAINT site_board_pins_sensor_types_id_fk FOREIGN KEY (id) REFERENCES sensor_types (id)
);
插入失败:
INSERT INTO `site_board_pins` (`site_board_id`, `e_board_pin_id`, `pin_type_id`, `pin_operation_mode`, `sensor_type_id`, `enabled`)
VALUES
((select id from e_boards where name = 'Iboard Pro 1.1'),
(select ep.id from e_boards eb join e_board_pins ep on ep.e_board_id = eb.id where eb.name = 'Iboard Pro 1.1' and ep.name = 'A1'),
(select id from pin_types where mode = 'Analog'),
NULL,
NULL,
0);
提前致谢
看起来您弄乱了 FK 定义 - 所有 FK 都声明说您的 Id
列存在于所有这些其他表中。
例如,我很确定你的第一个应该是:
CONSTRAINT site_board_pins_site_boards_id_fk FOREIGN KEY (site_board_id) REFERENCES site_boards (id)
我正在创建一些新的 tables,我想用测试数据填充它们,我遇到了 mysql 8 的这个问题。
我一直在 table 上使用空 FK,但现在我不知道发生了什么。
我认为是 mysql 8 的东西,我最近更新了,直到现在我都没有遇到问题。
我正在使用 8.0.12。
我得到的错误是:
[23000][1452] Cannot add or update a child row: a foreign key constraint fails (
i2cwac_test
.site_board_pins
, CONSTRAINTsite_board_pins_sensor_types_id_fk
FOREIGN KEY (id
) REFERENCESsensor_types
(id
))
table 创建脚本:
CREATE TABLE site_board_pins
(
id bigint(20) PRIMARY KEY NOT NULL AUTO_INCREMENT,
site_board_id bigint(20) NOT NULL,
e_board_pin_id bigint(20) NOT NULL,
pin_type_id bigint(20) NOT NULL,
pin_operation_mode bigint(20) NULL,
sensor_type_id bigint(20) NULL,
enabled bit(1) NOT NULL ,
description varchar(500),
CONSTRAINT site_board_pins_site_boards_id_fk FOREIGN KEY (id) REFERENCES site_boards (id),
CONSTRAINT site_board_pins_e_board_pins_id_fk FOREIGN KEY (id) REFERENCES e_board_pins (id),
CONSTRAINT site_board_pins_pin_types_id_fk FOREIGN KEY (id) REFERENCES pin_types (id),
CONSTRAINT site_board_pins_pin_operation_mode_id_fk FOREIGN KEY (id) REFERENCES pin_operation_mode (id),
CONSTRAINT site_board_pins_sensor_types_id_fk FOREIGN KEY (id) REFERENCES sensor_types (id)
);
插入失败:
INSERT INTO `site_board_pins` (`site_board_id`, `e_board_pin_id`, `pin_type_id`, `pin_operation_mode`, `sensor_type_id`, `enabled`)
VALUES
((select id from e_boards where name = 'Iboard Pro 1.1'),
(select ep.id from e_boards eb join e_board_pins ep on ep.e_board_id = eb.id where eb.name = 'Iboard Pro 1.1' and ep.name = 'A1'),
(select id from pin_types where mode = 'Analog'),
NULL,
NULL,
0);
提前致谢
看起来您弄乱了 FK 定义 - 所有 FK 都声明说您的 Id
列存在于所有这些其他表中。
例如,我很确定你的第一个应该是:
CONSTRAINT site_board_pins_site_boards_id_fk FOREIGN KEY (site_board_id) REFERENCES site_boards (id)