试图自动将外键值插入我的mysql表

时间:2013-01-23 10:07:21

标签: php mysql foreign-keys primary-key database-table

我是PHP和MySQL的新手,需要帮助...

我似乎无法理解如何自动将外键插入数据库中的表。主键在我的'mem'表中添加为'id'但我希望将相同的id添加到我的'location'表中的外键中。有人可以帮忙吗?

我有两张桌子......

'mem table' id,用户名,电子邮件。

  |    1    |    2    |    3    |
  |   paul  |   john  | francis |       
  | paul@gm.| john@gm.|francis@.|

'位置表' id,location,user_id<<忘记密钥

  |    1    |    2    |    3    |
  |  leeds  |liverpool| london  |       
  |    ?    |    ?    |    ?    | 

如何让用户表中的'id'自动作为外键插入?

我使用这个PHP代码插入数据......

$sql = mysql_query("INSERT INTO mem (username, country, state, city, accounttype, email, password, signupdate) 
        VALUES('$username','$country','$state','$city','$accounttype','$email','$hashedPass', now())")      or die(mysql_error());
$id = mysql_insert_id();

$sql = mysql_query("INSERT INTO location (location) 
VALUES('$location')") or die(mysql_error());
$user_id = mysql_insert_id();

我提交表单时收到此错误... 无法添加或更新子行:外键约束失败(memlocation,CONSTRAINT location_ibfk_1 FOREIGN KEY(user_id)REFERENCES location({{ 1}})ON DELETE CASCADE ON UPDATE CASCADE)

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

你的FK方向错误。它说:“用户表中的每个条目都必须在位置表中有一个条目。”您尝试在用户表中插入,而不首先创建位置条目。所以FK失败了。

溶液: 在位置表“user_id - > users.user_id”上设置FK,这意味着“位置表上的每个user_id都应在users表中有一个条目。”。唯一的问题是:当您删除users表中的条目时,“ON DELETE CASCADE”不再有效... - 这可以通过数据库触发器(PSEUDOCODE)解决“删除FROM FROM users DELETE FROM locations WHERE user_id “或者你只是用PHP做2个查询。 (这是更简单的解决方案。第一个删除位置行,第二个用户行。)