我到处都找过,看到了与这个问题有关的大多数线程,但仍然无法让它为我工作。
这是我使用Workbench制作的。这是一个房地产数据库:
DROP DATABASE IF EXISTS projet3;
CREATE DATABASE projet3;
USE projet3;
CREATE TABLE Localite (
Localite_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
Commune VARCHAR(50) NOT NULL,
Departement SMALLINT NOT NULL,
PRIMARY KEY (Localite_ID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE Bien (
Bien_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
SurCar1 DOUBLE NOT NULL,
TypeLoc VARCHAR(15) NOT NULL,
NoPP SMALLINT NOT NULL,
Localite_ID SMALLINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (Bien_ID),
CONSTRAINT FK_Localite FOREIGN KEY (localite_ID) REFERENCES localite (Localite_ID) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE Mutation (
Mutation_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
DateMutation DATETIME NOT NULL,
ValeurFonciere INT NOT NULL,
Bien_ID SMALLINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (Mutation_ID),
CONSTRAINT FK_Bien FOREIGN KEY (Bien_ID) REFERENCES bien (Bien_ID) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS Adresse;
CREATE TABLE Adresse (
Adresse_ID SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
NoVoie SMALLINT NOT NULL,
TypeVoie VARCHAR(10) NOT NULL,
NomVoie VARCHAR(50) NOT NULL,
CodePostal INT NOT NULL,
Bien_ID SMALLINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (Adresse_ID),
CONSTRAINT FK_Bien FOREIGN KEY (Bien_ID) REFERENCES bien (Bien_ID) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;`
相应的模型如下所示:EER模型我不得不将Bien和Adresse之间的关系改为1对1,然后我进行了前瞻性设计。我知道我可以将Adresse属性集成到Bien表中,但为了完成必须执行的任务,我将它们分开。
然而,当我尝试用外键将数据导入任何表时,工作台拒绝向我提供以下信息:无法添加或更新子行
我也试过简单地创建表,导入数据,然后创建外键,但我得到了相同的结果。
任何帮助都将不胜感激!
您的问题是
你有两次
CONSTRAINT FK_Bien FOREIGN KEY (Bien_ID) REFERENCES bien (Bien_ID) ON DELETE RESTRICT ON UPDATE CASCADE
由于每个外键都需要其唯一名称。
因此将表中的第二个Adresse
重命名为FK_Bien1
创建表后暂时禁用外键检查;在使用以下命令加载数据之前:
FOREIGN_KEY_CHECKS = 0
将数据加载/导入表后,可以通过将其设置回1来启用外键检查。这个参数的一些用例已经在TablePlus的博客上有很好的记录。