当前位置: 首页 > 知识库问答 >
问题:

如何解决错误号:1452-无法添加或更新子行:外键约束失败

邴子实
2023-03-14

错误号码:1452

无法添加或更新子行:外键约束失败(smpstudent,约束FK\u ParentStudent外键(p\u id)引用parentp\u id)在更新级联时删除级联)

INSERT INTO学生s_idstudent_codef_namel_namedob性别地址电话用户名 密码)值 ('', 'cbg','sdfsdf','sdfsd','02/13/2019','男性','fgfhnf', '', 'admin','pAQ7oL r8QJNgy2siN5moyJUhrgSj5tq3Ai5U2ngMyvaQZDsS9ooPbfccm8qKEWi1C6nbYdMCyscz6ngU 1Tiw==')

文件名:C:/xampp/htdocs/SMP/system/database/DB\u驱动程序。php

电话号码:691

我得到这个错误,我认为这与我在控制器中的函数有关

public function register_students()     {

    // $this->load->model('Register_model','multi_model',TRUE);
    $encrypted_password1 = $this->encrypt->encode($this->input->post('p_pwd'));
    $parent_data = array(
        'p_id' => '',
        'parent_code' => $this->input->post('parent_code'),
        'f_name' => $this->input->post('p_first_name'),
        'l_name' => $this->input->post('p_last_name'),
        'dob' => $this->input->post('p_dob'),
        'address' => $this->input->post('p_address'),
        'tel' => $this->input->post('p_tel_no'),
        'email' => $this->input->post('email'),
        'username' => $this->input->post('p_username'),
        'password' => $encrypted_password1,
    );
        // var_dump($student_data);
        // var_dump($parent_data);

    $result = $this->Model_Action->insertTable('parent', $parent_data);
    $encrypted_password = $this->encrypt->encode($this->input->post('pwd'));
    $student_data = array(
        's_id' => '',
        'student_code' => $this->input->post('student_code'),
        'f_name' => $this->input->post('first_name'),
        'l_name' => $this->input->post('last_name'),
        'dob' => $this->input->post('dob'),
        'gender' => $this->input->post('gender'),
        'address' => $this->input->post('address'),
        'tel' => $this->input->post('tel_no'),
        'username' => $this->input->post('username'),
        'password' => $encrypted_password,
    );
    $result = $this->Model_Action->insertTable('student', $student_data);
    // $result = $this->multi_model->student_register($student_data, $parent_data);
    if($result)         {
        redirect('student');
    }
    else
    {
        redirect('student');
    }
}

模型

 function insertTable($table, $data) {
     $this->db->insert($table, $data);
     return $this->db->insert_id();
 }

创建表students_idint(11)非空自动递增,student_codevarchar(50)非空,f_namevarchar(150)非空,l_namevarchar(250)非空,DOB文本非空,genderenum('male')、enum')非空,varchar非空,telint(50)非空,usernamevarchar(100)非空,passwordvarchar(150)非空,p\u idint(11)非空,主键(s\u id),键s\u ids\u id),键p\u id),键,键p\u id)在更新级联时删除级联时引用父级(p\u id)引擎=InnoDB自动增量=16默认字符集=1

创建表parentp\u idint(11)非空自动增量,parent\u codevarchar(100)非空,f\u namevarchar(150)非空,l\u namevarchar(250)非空,DOB文本非空,addressaddressvarchar(250)非空,telvarchar(50)不为空,emailvarchar(250)不为空,usernamevarchar(250)不为空,passwordvarchar(250)不为空,主键(p_id),键p_id)引擎=InnoDB AUTO_INCREMENT=10默认字符集=1


共有2个答案

傅经业
2023-03-14

如果p_id是您的主键,则在插入时不应传递它。删除此行'p\u id'=

如果无法删除或更新数据。请检查您的数据库表foreign_key限制,您可能已经为此限制了它。

空鸿云
2023-03-14

通过分析PHP代码,我发现您首先插入父对象,用于插入的函数返回一个父对象id,但您没有在student insert中使用它。如果将其添加到学生数组中,将解决您的问题:

public function register_students()     {
   {...}
   $p_id = $this->Model_Action->insertTable('parent', $parent_data); // Parent it returned

   $encrypted_password = $this->encrypt->encode($this->input->post('pwd'));
   $student_data = array(
       's_id' => '',
       'p_id' => $p_id, // Adding parent id to student_data
       {...}
   );

   $result = $this->Model_Action->insertTable('student', $student_data);
   {...}

}

关于SQL错误的解释

您会得到这个SQL异常错误,因为在学生表中,您定义了一个非空外键p_id引用父表上的p_id

CREATE TABLE student (  
  s_id int(11) NOT NULL AUTO_INCREMENT,  
  student_code varchar(50) NOT NULL,  
  f_name varchar(150) NOT NULL,  
  l_name varchar(250) NOT NULL,  
  DOB text NOT NULL,  gender enum('male','female') NOT NULL,  
  address varchar(450) NOT NULL,  
  tel int(50) NOT NULL,  
  username varchar(100) NOT NULL,  
  password varchar(150) NOT NULL,  
  p_id int(11) NOT NULL, 
  PRIMARY KEY (s_id), 
  KEY s_id (s_id), 
  KEY p_id (p_id), 
  CONSTRAINT FK_ParentStudent FOREIGN KEY (p_id) REFERENCES parent (p_id) ON DELETE CASCADE ON UPDATE CASCADE 
)ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1

请注意,p_id int(11)notnull使您无法向父表传递除有效id引用以外的任何内容。也就是说,您不能从父表传递'null或有效id以外的任何其他值。如果希望此外键具有默认值,请编辑SQL以在student表中包含p_id的默认值:

p_id int(11)默认为NULL

 类似资料:
  • 错误代码:1452。无法添加或更新子行:外键约束失败(.,约束外键()引用()) 我看过其他关于这个话题的帖子,但没有运气。我是不是在监督什么或者知道该怎么做?

  • 问题内容: 我的数据库中有两个表: ; 。 有一个列引用了表的列。每当我试图做在上面的错误将显示和数据不会被保存。 问题答案: 听起来是在表之间您在数据库中具有外键约束。这意味着,在Course_id列中,您不能插入与外部表中的id不同的值。 上面的错误意味着当您发布数据时,外部字段为空或丢失。 查找内容:1.检查数据库中子表中的外部字段是否可以接受NULL。如果您具有带值的下拉列表,并且如果该字

  • 问题内容: 当我执行以下SQL命令时: 我收到以下错误消息: 我的桌子: 我研究了许多类似的案例,但找不到任何解决方案。任何帮助,将不胜感激。 问题答案: 为什么您获得的是异常的原因是因为你将在表中的记录,其中的价值是不存在的表。与相同的值也未显示在表上。 表格取决于表格:和 。所以,要确保在表中插入记录时,该值与存在于父表已经:和 。 尝试执行此查询,并确定将其插入。 SQLFiddle演示 我

  • 问题内容: 当我不想相互连接两个表时,我得到以下消息:#1452-无法添加或更新子行:外键约束失败....我想从facebook_users表格中连接oauth_uid2(主键)外键为oauth_uid2的错误列表。但是我总是得到这个信息。我已经清除了数据,但没有任何效果。在表users_facebook中,我还有1条记录。 1452-无法添加或更新子行:外键约束失败(。,在更新级联上删除级联时使

  • 当我不想将两个表相互连接时,我收到消息:#1452 - 无法添加或更新子行:外键约束失败....我想使用外键oauth_uid2将oauth_uid2(主键)从facebook_users选项卡连接到错误选项卡。但我总是收到这个信息。我已经清除了我的数据,但没有任何效果。同样在表中users_facebook我有 1 条记录。 1452-无法添加或更新子行:外键约束失败(., CONSTRAINT

  • 保存; 例外 调试:org.hibernate.engine.jdbc.spi.sqlExceptionHelper-无法执行语句[n/a]com.mysql.jdbc.exceptions.mysqlintegrityConstraintViolationException:无法添加或更新子行:外键约束失败(。,约束)外键()引用 警告:org.hibernate.engine.jdbc.spi