游戏库存数据库外键

时间:2013-03-23 21:50:52

标签: php mysql database phpmyadmin

正在为游戏构建设置数据库。

它有3个表:

USER_TABLE

user_id - PK

用户名

密码

电子邮件

水平

位置

user_inventory

user_inventory_id - PK

user_id - FK

game_item_id - FK

game_items

game_item_id - PK

ITEM_NAME

现在在我的注册脚本中我简单地将一条记录插入到user_table中,保存用户名,电子邮件和密码,但由于我创建了另外两个表并在user_inventory表中创建了user_id和game_item_id外键,我收到了这个错误:< / p>

  

'PDOException',消息'SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(sik_game_dbuser_table,CONSTRAINT {{1} } FOREIGN KEY(user_table_ibfk_1)REFERENCES user_iduser_inventory)ON DELETE CASCADE''

我的表是InnoDB,它们都是空的。

以下是我用于插入表格的声明:

user_inventory_id

所以我的问题:

1)这是为RPG类型游戏的库存系统设置数据库表的正确方法吗?

2)为什么我在尝试插入数据库时​​收到此错误?

修改 我的数据库的SQL转储:

$query = "INSERT INTO user_table (username, password, email)VALUES (:user, :pass, :em);";
    $args = array(
        ":user" => $m_username,
        ":pass" => $m_password,
        ":em" => $m_email
        );

谢谢汤姆

1 个答案:

答案 0 :(得分:3)

正如我所怀疑的那样,外键约束是错误的。

您需要使用相反的方式重新创建约束。

或者你应该能够运行代码:

ALTER TABLE `user_table` DROP FOREIGN KEY `user_table_ibfk_1`;

ALTER TABLE `user_inventory`
ADD CONSTRAINT `user_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user_table` 
(`user_id`) ON DELETE CASCADE;

应将外键约束添加到表中,以确保添加到该表中的任何记录已存在于另一个表中。所以在你的例子中。您希望确保将记录添加到user_inventory表中时,user_table中已存在具有正确user_id的记录。

您需要为其他外键约束计算出逻辑,以确保在正确的表上设置了该键。