【问题标题】:MySQL auto_increments always insert 2147483647MySQL auto_increments 总是插入 2147483647
【发布时间】:2019-06-20 19:31:55
【问题描述】:

我在 PHP 中有以下 SQL 代码

    $conn->query("INSERT INTO orders (Name,Email,phone) VALUES 
    ('$name','$email','$phone')");

我的数据库表有 id,Name,Email,phone

插入成功,但 id 始终设置为 2147483647,即最大 int(11)

所以我的表中只有一行

ID----------姓名------邮箱--------电话

2147483647--John--Smith--John@John.com--04524524

id 字段设置为自增

它不是 1 或 2,而是一直到最大值 (2147483647)

即使我做 BIGINT 或改变类型 mysql 也会插入最大 ID 增量

【问题讨论】:

  • 你能用 mysql> desc orders 发布表结构吗;
  • 致 OP:请注意,如果变量($name$email$phone)来自输入,则您的 PHP 代码容易受到 SQL 注入攻击。

标签: mysql auto-increment


【解决方案1】:

您可以使用以下方法重置计数器:

ALTER TABLE tablename AUTO_INCREMENT = 1

对于 InnoDB,您不能将 auto_increment 值设置为低于或等于当前最高索引。 (引自 [ViralPatel][1]):

请注意,您不能将计数器重置为小于或等于的值 任何已经使用过的。对于 MyISAM,如果值小于 大于或等于当前在 AUTO_INCREMENT 中的最大值 列,值被重置为当前最大值加一。为了 InnoDB,如果该值小于当前的最大值 列,不发生错误,当前序列值不变。

如果您只是在引导您的数据库,您可能应该考虑使用以下方法清空表:

TRUNCATE TABLE tablename;

上面的命令也会重置所有自动计数器。

【讨论】:

    【解决方案2】:

    我已经复制了表、数据和结构,然后删除了原来的。 然后重命名表以替换,然后瞧... 自动插入没问题

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 2012-05-02
      • 2021-07-23
      • 2014-06-26
      • 2014-03-31
      • 2013-09-09
      • 2011-01-08
      • 2018-12-24
      • 1970-01-01
      相关资源
      最近更新 更多