MySQL 不增加主键吗?

标签 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) , PK , NN , UQ ,和UN 。该表有一个外键 (PLAYER_ID) ,它指向PLAYER_IDPLAYERS table 。

AI 未选中 CHILD_ID ,所以我一边检查一边认为我的问题已经解决了。我正准备去申请这是它生成的脚本:

 ALTER TABLE `mvs`.`children` 
 CHANGE COLUMN `CHILD_ID` `CHILD_ID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ;

然后弹出此错误消息:

Operation failed: There was an error while applying the SQL script to the database. Executing: ALTER TABLE mvs.children CHANGE COLUMN CHILD_ID CHILD_ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ;

ERROR 1833: Cannot change column 'CHILD_ID': used in a foreign key constraint 'FK_CHAR_TO_CHILD_ID' of table 'mvs.characteristics' SQL Statement: ALTER TABLE mvs.children CHANGE COLUMN CHILD_ID CHILD_ID INT(11) UNSIGNED NOT NULL AUTO_INCREMENT

它似乎指的是我的特征表,其中保存了在 child 中找到的child_id的一般信息。

特征表中有CHAR_IDINT(10) , PK , NN , UQ , UN ,和AI 。它有一个FKCHILD_ID INT(10) , NN , UQ ,和UN 。引用表为children ,栏CHILD_ID ,引用栏目:CHILD_ID

总的来说,我想在插入CHILDREN时自动增加新的子记录。 。作为最近接触 MySQL 的新手,我对这个错误消息所指的内容以及解决方案感到困惑。不知道是不是我对FK's的理解比较少以及是否确实需要它们。截至目前,我让每个表都引用其父表。 child 有一个 parent ID,特征有一个 child ID,等等。

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

最佳答案

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

关于MySQL 不增加主键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262715/

相关文章:

mysql - 简单的 JOIN 查询,但我不能复制结果,因为它们应该在 MySQL 中返回

php - 当没有行时 mysql_num_rows 不起作用

mysql - 从 select 语句插入日期时出现问题错误代码 : 1292 MySQL

php - MySQL 和 PHP - 插入 NULL 而不是空字符串

MySQL 加入最高?

php - 尝试将数据插入数据库时​​出错。简单的形式

php - 了解 php 成员(member)系统中的错误

PHP MySQL POST 插入

sql - 插入时,输出未插入但在连接表中的列

mysql - WordPress - MySQL 自动增加用户 ID