MySQL没有递增主键?

时间:2017-07-23 07:43:32

标签: mysql sql-insert

我正在制作类似模拟人生的游戏,并且在使用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)PKNNUQUN 。该表有一个外键(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 mvschildren更改列   CHILD_ID CHILD_ID INT(11)UNSIGNED NOT NULL AUTO_INCREMENT;

     

错误1833:无法更改列'CHILD_ID':在外键中使用   表'mvs.characteristics'SQL的约束'FK_CHAR_TO_CHILD_ID'   声明:ALTER TABLE mvschildren更改字段CHILD_ID   CHILD_ID INT(11)UNSIGNED NOT NULL AUTO_INCREMENT

它似乎是指我的特征表,其中包含在儿童中发现的child_id的一般信息。

在特征表中,它CHAR_IDINT(10)PKNNUQUN和{{1 }}。它有AI FKCHILD_ID INT(10)NNUQ。参考表为UN,列children,引用列:CHILD_ID

总的来说,我希望在插入CHILD_ID时自动增加新的子记录。最近刚接触MySQL,我迷失了这个错误消息所带来的解决方案。我想知道这是否是我对CHILDREN的较少理解以及是否真的需要它们。截至目前,我将每个表引用回其父表。 Child具有父ID,特征具有子ID等。

任何提示都有帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

尝试将数据类型更改为BIGINT。由于您使用的是childID,因此无需在查询中添加AUTO Increment。也许你可以在代码上使用一个增量代替每次插入。