搜索

首页  >  问答  >  正文

无法将列设置为自动递增的问题在MySql中存在

<p>我有一个名为"Bestelling"的表,有4个列:"Id"(主键),"KlantId","Datum","BestellingsTypeId",现在我想让列Id自动递增,但是,当我尝试这样做时,我得到了以下错误:</p> <pre class="brush:php;toolbar:false;">ERROR 1062: ALTER TABLE导致自动递增重新排序,导致主键'PRIMARY'的重复条目'1' SQL语句: ALTER TABLE `aafest`.`aafest_bestelling` CHANGE COLUMN `Id` `Id` INT(11) NOT NULL AUTO_INCREMENT ERROR: 运行回滚脚本时出错。详细信息如下。 ERROR 1046: 未选择数据库 SQL语句: CREATE TABLE `aafest_bestelling` ( `Id` int(11) NOT NULL, `KlantId` int(11) DEFAULT NULL, `Datum` date DEFAULT NULL, `BestellingstypeId` int(11) DEFAULT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1</pre> <p>有人有什么想法吗?</p>
P粉998100648P粉998100648462 天前598

全部回复(2)我来回复

  • P粉391677921

    P粉3916779212023-08-23 15:36:57

    当我尝试将一列转换为auto_increment时,我也遇到了这个问题,其中一行的值为0。一个替代的方法是通过设置:

    SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';

    来为会话设置。

    这样可以将该列更改为带有零ID的auto_increment。

    零并不理想,我也不建议在auto_increment列中使用它。不幸的是,它是继承的数据集的一部分,所以我暂时无法更改它。

    最好在之后清除设置(以及其他设置):

    SET SESSION sql_mode='';

    尽管在当前客户端会话关闭时会被清除。

    关于'NO_AUTO_VALUE_ON_ZERO'设置的完整详情在这里

    回复
    0
  • P粉146080556

    P粉1460805562023-08-23 00:06:11

    如果表中包含一个id为0(或负数)的现有记录,就会发生这种情况。将所有现有记录更新为使用正值将允许在该列上设置auto_increment。

    编辑:有些人问如何出现了0。为了澄清,MySQL参考手册指出,“对于数值类型,默认值为0,但对于带有AUTO_INCREMENT属性的整数或浮点数类型,默认值为序列中的下一个值。”因此,如果在启用auto_increment之前在表上执行插入操作而没有为数值列提供值,则在插入期间将使用默认值0。更多详细信息可在https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html找到。

    回复
    0
  • 取消回复