【问题标题】:I cannot add 'null' in foreign key我不能在外键中添加“null”
【发布时间】:2014-09-24 00:03:16
【问题描述】:

我已经创建了两个表,如下图:

CREATE TABLE `leiame` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `number` INT(10) NOT NULL,
    `title` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`id`) )

CREATE TABLE `download` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL,
    `id_leiame` INT(10) UNSIGNED NULL,
    PRIMARY KEY (`id`),
    CONSTRAINT `leia_id_fk` FOREIGN KEY (`id_leiame`) 
                            REFERENCES `leiame` (`id`) ON UPDATE CASCADE )

当我在下载时为 id_leiame 添加 null 值时,出现以下错误:

无法添加或更新子行:外键约束失败(`bd`.`download`, CONSTRAINT `leia_id_fk` FOREIGN KEY (`id_leiame`) REFERENCES `leiame` (`id`) ON UPDATE CASCADE)

我将 id_leiame 设置为 NULL。

我错过了什么?

【问题讨论】:

  • Works for me。您可以发布导致问题的 DML 吗?
  • 你确定你的插入是正确的......并且你没有尝试插入'null'而不是null。插入 kkm.download (name, id_leiame) 值 ('something', null);在我的机器上工作正常:-)
  • 我插入 'null' 但不起作用! DML 代码:$crud = new crud('d​​ownload'); $crud->inserir("name,id_leiame", "'$name','$leiame'");
  • 你应该插入 null ... 而不是 'null'
  • @Marcel:请在问题中添加您的代码,因为这似乎是问题的原因,NULL 作为特殊值和 'null' 作为字符串之间的区别。

标签: mysql sql null foreign-keys


【解决方案1】:

正如其他人在 cmets 中指出的那样,根据您正在执行的语句,您似乎插入了“null”(即包含 null 的字符串)而不是实际的 NULL,即没有值。

你需要做的是(不正确的语法)

if($leiame == "")
   $crud->inserir("name,id_leiame", "'$name',null") << no single quotes!
else
   $crud->inserir("name,id_leiame", "'$name','$leiame'")

【讨论】:

  • 你能提供确切的说法吗?
  • $leiame = $_POST['leiaID']; $crud->inserir("name,id_leiame", "'$name','$leiame'");
  • 我的意思是您明确输入 NULL 而不是“null”。或者你只是尝试插入'NULL'(即仍然是一个字符串,但大写)!?
  • 我试过但没有用! =( 错误是:无法添加或更新子行:外键约束失败 (bd.download, CONSTRAINT leia_id_fk FOREIGN KEY (id_leiame) REFERENCES leiame (id) ON UPDATE级联)
  • 错误很明显。 原因不清楚。从到目前为止您提供的所有代码中,您似乎总是插入一个包含字符'n''u''l''l 的字符串,而不是实际的空值,因此出现 FK 错误,因为该字符串不存在于leiname 表。您需要做的是类似于“if($leiname == '') INSERT NULL else INSERT $leiname'。 (我不能给你 PHP 代码,因为我不太了解 PHP)
猜你喜欢
  • 2011-08-11
  • 2015-11-20
  • 2019-05-04
  • 2016-01-05
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
相关资源
最近更新 更多