我有2個表,一個用於員工,另一個用於部門。一個部門可以有多個員工,但一個員工只能在一個部門工作。他們的關係是[1:很多]。MySQL - 一對多關係無法正常工作
我想在MySQL中做到這一點,但我遇到了一個問題。如果我有8個不同的部門,我嘗試添加超過800名員工總數,誰在不同的部門工作,我得到以下錯誤:
Cannot add or update a child row: a foreign key constraint fails (`testdb`.`employee`, CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`id`) REFERENCES `department` (`id`))
如果我有8名或更少的員工,一切都很正常。添加第9名員工後,我收到上述錯誤。
部門表:
CREATE TABLE IF NOT EXISTS department(
id INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE
)ENGINE=INNODB;
處插入:
INSERT INTO department(name) VALUES ('Athens');
INSERT INTO department(name) VALUES ('Patras');
INSERT INTO department(name) VALUES ('Kalamata');
INSERT INTO department(name) VALUES ('Heraklion');
INSERT INTO department(name) VALUES ('Thessaloniki');
INSERT INTO department(name) VALUES ('Xanthi');
INSERT INTO department(name) VALUES ('Larisa');
INSERT INTO department(name) VALUES ('Alexandroupoli');
Employee表:
CREATE TABLE IF NOT EXISTS employee(
id INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
born INT(20) NOT NULL,
country VARCHAR(255) NOT NULL,
department_name VARCHAR(255) NOT NULL,
FOREIGN KEY (id) references department(id)
)ENGINE=INNODB;
個員工插入:
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Vaggelis','Michos','[email protected]','1995','Greece','Athens');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('James','Gunn','[email protected]','1970','USA','Athens');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('George','McMahon','[email protected]','1978','Usa','Patras');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('John','Jones','[email protected]','1992','England','Patras');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Marinos','Kuriakopoulos','[email protected]','1986','Greece','Alexandroupoli');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Dimitris','Nikolaou','[email protected]','1984','Greece','Larisa');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Soufiane','El Kaddouri','[email protected]','1974','France','Xanthi');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Maria','Apostolou','[email protected]','1997','Greece','Larisa');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Ioannis','Marinou','[email protected]','1982','Greece','Kalamata');
INSERT INTO employee(first_name,last_name,email,born,country,department_name) VALUES('Thanasis','Athanasiou','[email protected]','1989','Cyprus','Heraklion');
這是什麼樣子後CREATE-INSERT操作:
正如你所看到的,在第9插入員工表,插入失敗,我得到我描述的錯誤,這是:
Cannot add or update a child row: a foreign key constraint fails (`testdb`.`employee`, CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`id`) REFERENCES `department` (`id`))
在員工插入,我需要分給DEPARTMENT_ID我在部門插入了同樣的ID? –
@ ceid-vg是的,插入員工時使用的department_id與員工所在部門的部門表中的ID相匹配。當您想要顯示員工的部門名稱時,請加入這兩個表格。我同意Jacques的說法,這些ID最好命名爲dept_id和emp_id,以使您的代碼更具人類可讀性。 – LAS