Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL没有增加主键吗?_Mysql_Sql Insert - Fatal编程技术网

MySQL没有增加主键吗?

MySQL没有增加主键吗?,mysql,sql-insert,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_

我正在创建一个类似模拟人生的游戏,但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工作台时,CHILD_ID有以下信息:INT11、PK、NN、UQ和UN。该表有一个外键PLAYER_ID,它指向PLAYERS表中的PLAYER_ID

AI对于CHILD_ID是未检查的,所以我在思考我的问题已经解决时检查它。我马上就要申请了。这是它生成的脚本:

 ALTER TABLE `mvs`.`children` 
 CHANGE COLUMN `CHILD_ID` `CHILD_ID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ;
然后弹出此错误消息:

操作失败:将SQL脚本应用于时出错 数据库。正在执行:更改表mvs.children更改列 子ID子ID INT11无符号非空自动增量

错误1833:无法更改列“CHILD_ID”:在外键中使用 表“mvs.characteristics”SQL的约束“FK\u CHAR\u TO\u CHILD\u ID” 语句:ALTER TABLE mvs.children更改列CHILD_ID 子ID INT11无符号非空自动增量

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

在特征表中,它的字符ID为INT10、PK、NN、UQ、UN和AI。它的FK为CHILD_ID INT10、NN、UQ和UN。引用表是children,列CHILD\u ID,引用列:CHILD\u ID

总的来说,我希望在插入子项时自动增加新的子项记录。作为MySQL的新手,我对这个错误消息所指的内容以及解决方案感到迷茫。我想知道这是否是我对FK的理解不足,是否真的需要它们。到现在为止,我已经让每个表返回到它的父表。子项具有父项id,特征具有子项id,等等


任何提示都很有用,谢谢

尝试将数据类型更改为BIGINT。您不需要在查询中添加childID,因为您使用的是自动递增。也许你可以在代码中使用一个增量代替每个插入。< /P>这是什么语言,C++?为什么一个int 10,另一个int 11?为什么要指定一个int的大小?我完全不知道你的API,但是在Java中,如果你想自动递增一个列,你要么不能为它指定一个值,要么传递null。可能的重复不是重复的,但是一个有用的读物。我将INT11改为BIGINT。然而,当我向CHILD_ID添加Auto Increment时,我遇到了同样的问题。我收到了上面发布的错误消息。所以,在这个错误消息被解决之前,它不会自动递增。诚然,我可以从我的程序中完成这项工作,但我觉得从长远来看,这是一种不太容易出错的方法,如果我能让它自动工作的话,对服务器的调用也会更少。我有以下表,这些表有外键指向表子项,例如特征、愿望、喜好、首选项和技能。每个都有一个child_id以及指向children中child_id的外键。由于这些外键,我收到了此错误消息。例如,如果我从表特征中删除外键,上面的错误消息中将显示表首选项。我不确定这是否是解决方案,但我去掉了指向children.child\u id的外键。接下来,我向children.children\u id添加了自动递增。这终于奏效了。也许我误解了何时使用外键。哦,我明白了,也谢谢你提供的额外信息。