正在为游戏构建设置数据库。
它有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_db
。user_table
,CONSTRAINT {{1} } FOREIGN KEY(user_table_ibfk_1
)REFERENCESuser_id
(user_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
);
谢谢汤姆
答案 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的记录。
您需要为其他外键约束计算出逻辑,以确保在正确的表上设置了该键。