我有用户表。
我尝试在空用户表中插入两行 (不是包含现有行的表格)。
插入数据时,它将第一个数据的 id(主键int(10)unsigned autoincrement)插入为 4294967295 。插入第二个数据时,它导致< strong>完整性约束:重复条目“4294967295”,因为无法插入大于4294967295的值。
我尝试放下桌子并再次创建(虽然不是正确的方法),但它运行良好。
我需要知道为什么会这样?以及解决方案。
答案 0 :(得分:3)
整数有32位,所以你的最大值是
2^32 = 4294967295
因此,如果你需要更多,你需要像bigint这样的其他类型。
$this->bigIncrements('id');
将使用bigint作为增量。
答案 1 :(得分:0)
当插入带有自动增量字段的表时,根本不应指定自动增量字段本身。在示例中,categorieID是主键
Query("INSERT INTO prod_categorie (categorieID, parentID) VALUES (?, ?)", array($chkParent, $txtParentCategorie));
应该只是
Query("INSERT INTO prod_categorie (parentID) VALUES (?)", array($txtParentCategorie));
答案 2 :(得分:0)
导致错误是因为auto_increment值已达到其最大值。
可能是因为你有太多记录,或者是因为你犯了错误。
当您意外插入新记录并提供auto_increment值时,通常会发生这种情况。
大部分时间都是因为你有一个名字相似的列,并且你输入的拼写错误导致auto_increment值更新了你提供的值,如果你提供的是字符串而不是int,则为4294967295。
解决这个问题:
select max(autoincrementColumNameHere) from tableNameHere
ALTER TABLE tableNameHere AUTO_INCREMENT = (maxValue+1)