0

我无法理解外键。我收到一个数据库错误 1452,说无法添加/更新子行,我不知道这意味着什么。

我假设通过浏览您需要从另一个表中获取值的答案,但不确定这是否正确。

我正在尝试在表中插入一行,这会导致该错误。如何像使用 CI 插入的其他值一样指定外键的值?

请帮忙

这是我要插入的内容:

$salarystuff = array('salary' => $salary, 'from_date' => $salary_from_date, 'to_date' => $salary_to_date);
$this->db->insert('salaries', $salarystuff);

表薪水具有以下列:emp_no、salary、to date 和 from date。我已经插入了除了上面看到的 id 之外的所有内容,但是需要另一个表中的 id。这是错误消息:

无法添加或更新子行:外键约束失败 ( employees. salaries, CONSTRAINT salaries_ibfk_1FOREIGN KEY ( emp_no) REFERENCES employees( emp_no) ON DELETE CASCADE)

4

1 回答 1

1

我收到一个数据库错误 1452,说无法添加/更新子行,我不知道这意味着什么。

这通常意味着您尝试向其中插入一行的表至少有一列包含对另一个表的外键引用。这意味着您为该列提供的任何值必须已经存在于该其他表中。(为不存在的员工存储薪水是没有意义的。)

无法添加或更新子行:外键约束失败(employees.salaries, CONSTRAINTsalary_ibfk_1 FOREIGN KEY (emp_no) REFERENCES employees (emp_no) ON DELETE CASCADE)

当您在“salaries”中插入一行时,您为“emp_no”提供的值必须已经存在于“employees”中。

所有可能的值都在“employees.emp_no”中。如何从所有可能的值中选择正确的“emp_no”取决于应用程序。

大多数时候,我们希望用户从员工编号和员工姓名的下拉列表中选择一个员工编号,然后填写新的薪水。用户是否填写“开始日期”和“截止日期”或是否自动完成取决于应用程序。在用户选择姓名并提供薪水后,在用户填写“起始日期”和“到日期”或通过代码计算后,您可以将这些值作为新行插入“薪水”。

无论如何,就数据库插入语句而言,您的 CI 代码应该像处理所有其他列一样处理“emp_no

于 2012-12-27T20:38:51.437 回答