【问题标题】:1452 - Cannot add or update a child row1452 - 无法添加或更新子行
【发布时间】:2019-02-28 13:48:00
【问题描述】:

我的数据库(使用 MariaDB)插入新行时遇到问题

我有以下错误

无法添加或更新子行:外键约束失败 (DbName_boutique.Commande, 约束bdc_managed_by___fk FOREIGN 关键(bdc_managed_by_user_id)参考utilisateur (utilisateur_id))插入命令 (lien_devis,lien_bdc, end_devis、bdc_status、devis_created_by_user_id、 bdc_managed_by_user_id, entreprise_id)

我的控制器上有这段代码:

$unknow = NULL;
$end_date = date('d/m/Y', strtotime("+1 month"));
$user = checkConnected($bdd);
Commande::create($bdd, $new_full_modele_devis_path, $new_full_modele_devis_path, $end_date, 0, $user->getId(), $user->getId(), $entreprise->getId());

$unknow 是我稍后在另一个控制器中使用的值。

我的表“Commande”的构建如下:

create table dBName.Commande
(
  commande_id              int                  not null
    primary key,
  lien_devis               varchar(255)         null,
  lien_bdc                 varchar(255)         null,
  end_devis                datetime             null,
  bdc_status               int                  null,
  devis_created_by_user_id mediumint unsigned   null,
  bdc_managed_by_user_id   mediumint unsigned   null,
  entreprise_id            smallint(5) unsigned null,
  constraint bdc_managed_by___fk
    foreign key (bdc_managed_by_user_id) references dBName.utilisateur (utilisateur_id),
  constraint devis_created_by___fk
    foreign key (devis_created_by_user_id) references dBName.utilisateur (utilisateur_id),
  constraint entreprise___fk
    foreign key (entreprise_id) references dBName.entreprise (entreprise_id)
);

后来我有了用户表:

create table dBName.utilisateur
(
  utilisateur_id        mediumint unsigned auto_increment
    primary key,
  utilisateur_password  varchar(255) null,
  utilisateur_nom       varchar(50)  null,
  utilisateur_prenom    varchar(50)  null,
  utilisateur_email     varchar(255) null,
  utilisateur_telephone varchar(10)  null,
  utilisateur_fax       varchar(25)  null,
  is_active             tinyint(1)   null
)
  charset = utf8mb4;

和企业:

create table dBName.entreprise
(
  entreprise_id                smallint(5) unsigned auto_increment
    primary key,
  entreprise_nom               varchar(100)       null,
  entreprise_siret             char(14)           null,
  entreprise_telephone         char(10)           null,
  entreprise_salesforce_number varchar(100)       null,
  entreprise_compte_client     varchar(100)       null,
  entreprise_raison_sociale    varchar(100)       null,
  entreprise_APE               varchar(25)        null,
  entreprise_image_link        varchar(255)       null,
  adresse_id                   mediumint unsigned null,
  constraint FK_entreprise_adresse_id
    foreign key (adresse_id) references dBName.adresse (adresse_id)
)
  charset = utf8mb4;

我不明白为什么我会犯这个错误...有点帮助可以帮助我很多...谢谢。

【问题讨论】:

    标签: php mysql sql mariadb


    【解决方案1】:

    Commande表中,bdc_managed_by_user_id列通过外键引用映射到utilisateur表的utilisateur_id列。

    这意味着,每当您在Commande 表中插入一行时,对应的bdc_managed_by_user_id 必须是utilisateur 表中的utilisateur_id 之一。如果没有,就会出现上述错误。

    这称为外键约束,您可以查看 this 示例来描述它的工作原理。

    【讨论】:

    • 嗨!非常感谢你的帮助;我意识到当我说 $user-getid() 时,返回来自我的“Client”表和“utilisateur”表,我需要检查原因。
    猜你喜欢
    • 2017-05-28
    • 2014-07-27
    • 1970-01-01
    • 2012-02-06
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多