在MySQL中不能用外键插入记录?

时间:2014-04-14 05:10:37

标签: php mysql sql database foreign-keys

我有一个用户表和一个图片表。

图片表有一个上传者ID 列,它是一个外键。 它引用用户表中的用户ID 列。

出于某种原因,当我尝试将新记录插入图片表时,它无效。不会弹出任何错误消息。它只是不插入新记录。

INSERT INTO picture (pic_url, pic_uploader) VALUES($picurl, $uploader);

$ picurl 是文件上传的图像src路径。上传的文件位于正确的目录中,完全相同的代码完全适用于没有外键的早期记录。

$ uploader 包含外键值 - 来自包含用户帐户的用户ID 的会话变量 - 但它不会将其插入表中。

这是表格的SQL,如果有帮助......

图片表

CREATE TABLE IF NOT EXISTS picture (
  pic_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  pic_url varchar(200) NOT NULL,
  pic_uploader bigint(20) unsigned NOT NULL,
  PRIMARY KEY (pic_id),
  KEY pic_uploader (pic_uploader)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

图片约束

ALTER TABLE picture
  ADD CONSTRAINT pictures_ibfk_1 FOREIGN KEY (pic_uploader) REFERENCES user (user_id);

用户表

CREATE TABLE IF NOT EXISTS user (
  user_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  user_name varchar(80) NOT NULL,
  user_img varchar(200) NOT NULL DEFAULT 'img/defaultpic.png',
  user_email varchar(100) NOT NULL,
  user_pword char(60) NOT NULL,
  user_stat enum('0','1','A') NOT NULL,
  PRIMARY KEY (user_id),
  UNIQUE KEY user_email (user_email)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

2 个答案:

答案 0 :(得分:0)

用户表中不存在$ uploader值作为user_id的原因。

首先尝试使用sqlyog putty,mysqladmin等任何工具以简单的方式直接插入数据库。

INSERT INTO picture (pic_url, pic_uploader) VALUES('pic1', 'user1');

确保user1应存在于用户表中。如果它工作正常,那么你的应用程序中的问题其他明智的mysql将返回一个错误,我们将能够检查确切的问题,无论是由于外键还是其他。这样做并分享结果。

答案 1 :(得分:0)

在你的图片表中,你使用的是NOT NULL列。

但是你试图在insert命令中只插入两个值,这就是未插入数据的原因。

为所有列插入数据或将列设为NULLABLE。

由于

相关问题