字段“外键”没有默认值

dced5bon  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(504)

我使用nodejs和mysql开发了我的后端,我有以下三个表:
福尼瑟斯:

CREATE TABLE fournisseurs (

 Codef bigint(21) NOT NULL ,
 Noment varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 Prenomf varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (Codef, Prenomf)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

分类:

CREATE TABLE categorie (

 Idcat  bigint(21) NOT NULL AUTO_INCREMENT,
 Nomcat varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (Idcat, Nomcat)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

产品:

CREATE TABLE produits (

 Codep bigint(21) NOT NULL AUTO_INCREMENT,
 Reference bigint(21) NOT NULL,
 Nomp varchar(20) COLLATE utf8_unicode_ci NOT NULL ,
 Codef bigint(21) NOT NULL  ,
 Prenomf varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 Idcat  bigint(21) NOT NULL  ,
 Nomcat varchar(20) COLLATE utf8_unicode_ci NOT NULL,
 Description varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (Codep ),
 FOREIGN KEY (Codef, Prenomf) REFERENCES fournisseurs (Codef, Prenomf)
  ON DELETE CASCADE
 ON UPDATE CASCADE ,
 FOREIGN KEY (Idcat, Nomcat) REFERENCES categorie (Idcat, Nomcat)
 ON DELETE CASCADE
 ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10;

我尝试插入produits表,如下所示:

exports.ajouterprod = function(req, res) {
    console.log("req", req.body);
    var today = new Date();
    var produits = {
        "Reference": req.body.Reference,
        "Nomp": req.body.Nomp,
        // "Codef": req.body.Codef,
        "Prenomf": req.body.Prenomf,
        //"Idcat": req.body.Idcat,
        "Nomcat": req.body.Nomcat,
        "Description": req.body.Description
    }
    connection.query('INSERT INTO produits SET ?', produits, function(error, results, fields) {
        if (error) {
            console.log("error ocurred", error);
            res.send({
                "code": 400,
                "failed": "error ocurred"
            })
        }
        else {

            res.send({
                "code": 200,
                "success": "produit registered sucessfully"
            });
        }

    })
};

当我和 Postman 一起运行时,我得到: "failed": "error ocurred" 以及 error ocurred { Error: ER_NO_DEFAULT_FOR_FIELD: Field 'Codef' doesn't have a default value 在我的后端。如你所见 Codef 是我表上的主键 fournisseurs .
我该怎么修?

vjrehmav

vjrehmav1#

为什么会出现此错误:
由于您正在将数据插入produits,并且没有指定任何值codef,因此会生成此错误,因为外键需要一个值(也可以为null)
解决方案1:改变produits的表结构,使其具有某个默认值,该值要么存在于另一个表(引用外键的表)中,要么为空值。
解决方案2:在代码级别和引用外键的表中添加一些默认值。

相关问题