我正在制作类似模拟人生的游戏,并且在使用MySQL方面遇到了一些麻烦。我有以下功能:
snprintf(buffer, QUERY_MAX,
"INSERT INTO children (CHILD_ID, FIRST_NAME, LAST_NAME, AGE, CLEAN, HUNGRY, THIRSTY, DOLLARS, PLAYER_ID) VALUES (%d, '%s', '%s', %d, %f, %f, %f, %d, %d);",
0,
m_firstName.c_str(),
m_lastName.c_str(),
m_age,
0.0f,
0.0f,
0.0f,
3,
0);
if (!conn.executeNonQuery(buffer))
exit(0);
这会成功插入一条记录。但是,我想摆脱这个脚本中的CHILD_ID
部分并自动增加它。
当我进入MySQL Workbench时,CHILD_ID
包含以下信息:INT(11)
,PK
,NN
,UQ
和UN
。该表有一个外键(PLAYER_ID)
,指向PLAYER_ID
表中的PLAYERS
。
AI已取消选中CHILD_ID
,因此我会在认为我的问题已解决时进行检查。我即将申请。这是它生成的脚本:
ALTER TABLE `mvs`.`children`
CHANGE COLUMN `CHILD_ID` `CHILD_ID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ;
然后会弹出以下错误消息:
操作失败:应用SQL脚本时出错 数据库。执行:ALTER TABLE
mvs
。children
更改列CHILD_ID
CHILD_ID
INT(11)UNSIGNED NOT NULL AUTO_INCREMENT;错误1833:无法更改列'CHILD_ID':在外键中使用 表'mvs.characteristics'SQL的约束'FK_CHAR_TO_CHILD_ID' 声明:ALTER TABLE
mvs
。children
更改字段CHILD_ID
CHILD_ID
INT(11)UNSIGNED NOT NULL AUTO_INCREMENT
它似乎是指我的特征表,其中包含在儿童中发现的child_id的一般信息。
在特征表中,它CHAR_ID
为INT(10)
,PK
,NN
,UQ
,UN
和{{1 }}。它有AI
FK
,CHILD_ID INT(10)
,NN
和UQ
。参考表为UN
,列children
,引用列:CHILD_ID
。
总的来说,我希望在插入CHILD_ID
时自动增加新的子记录。最近刚接触MySQL,我迷失了这个错误消息所带来的解决方案。我想知道这是否是我对CHILDREN
的较少理解以及是否真的需要它们。截至目前,我将每个表引用回其父表。 Child具有父ID,特征具有子ID等。
任何提示都有帮助,谢谢!
答案 0 :(得分:0)
尝试将数据类型更改为BIGINT
。由于您使用的是childID
,因此无需在查询中添加AUTO Increment
。也许你可以在代码上使用一个增量代替每次插入。