刚刚完成为游戏即时建筑设置数据库的过程。游戏库存数据库外键
它有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_ID和game_item_id外键在user_inventory表我正在recieving此错误:
'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
sik_game_db
.user_table
, CONSTRAINTuser_table_ibfk_1
FOREIGN KEY (user_id
) REFERENCESuser_inventory
(user_inventory_id
) ON DELETE CASCADE)'
我的表是InnoDB的,而且都是空的。
这里是我使用插入到表中的语句:
$query = "INSERT INTO user_table (username, password, email)VALUES (:user, :pass, :em);";
$args = array(
":user" => $m_username,
":pass" => $m_password,
":em" => $m_email
);
所以我的问题:
1)这是正确的方式来建立我的数据库表的库存系统RPG类型的游戏?
2)为什么我在尝试插入数据库时收到此错误?
编辑 我的数据库的SQL转储:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `sik_game_db`
--
CREATE TABLE IF NOT EXISTS `game_items` (
`game_item_id` int(11) NOT NULL AUTO_INCREMENT,
`item_name` varchar(100) NOT NULL,
PRIMARY KEY (`game_item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `user_inventory` (
`user_inventory_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`game_item_id` int(11) NOT NULL,
`quantity` int(11) NOT NULL,
PRIMARY KEY (`user_inventory_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `user_table` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`level` int(11) NOT NULL,
`location` int(11) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Constraints for table `game_items`
--
ALTER TABLE `game_items`
ADD CONSTRAINT `game_items_ibfk_1` FOREIGN KEY (`game_item_id`) REFERENCES `user_inventory`
(`user_inventory_id`) ON DELETE CASCADE;
--
-- Constraints for table `user_table`
--
ALTER TABLE `user_table`
ADD CONSTRAINT `user_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user_inventory`
(`user_inventory_id`) ON DELETE CASCADE;
感谢汤姆
它看起来像你的外键约束是建立倒退。即在创建user_table之前,必须有一个带有User_ID的user_inventory记录。如果您发布了用于创建外键约束的代码,或者您可以自行修复它们! :) – Marryat 2013-03-23 21:56:11
我把它用phpMyAdmin的用户界面,所以我选择了在USER_TABLE PMA和选择的关系,然后选择user_inventory表表的列表,并与game_item_id相同。我希望这有帮助。我可以发布我可以从PMA导出的SQL脚本?谢谢 – 2013-03-23 22:01:18
我曾经使用过PMA,但我无法访问它。或者转储出sql,或者尝试以其他方式创建链接,然后查看是否可以解决您的问题。 – Marryat 2013-03-23 22:02:41