【问题标题】:strange issue with MySQL Auto Increment IdMySQL自动增量ID的奇怪问题
【发布时间】:2012-02-29 00:45:19
【问题描述】:

我的表中有一个自动增量 ID 列,当我使用 PHP 插入记录时它工作正常。我必须每小时使用 DELETE 语句从该表中删除记录。我更改了 PHP.ini 文件并重新启动了机器。由于某种原因,自动增量 ID 再次从“1”开始。当我重新启动机器时,表中没有任何记录。我正在使用在 IIS 下运行的 PHP 5.3.8 和 MySQL 5.5.21。如果有任何建议,请告诉我。这是我的表架构。

    CREATE TABLE `test_table` (
  `test_id` int(11) NOT NULL AUTO_INCREMENT,
  `test_date` datetime DEFAULT NULL,
  `test_location` varchar(2000) NOT NULL,
  `test_summary` varchar(4000) NOT NULL,
  `create_dtm` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`test_id`)
) ENGINE=InnoDB 

这是我的插入查询

$Sql = "INSERT INTO test_table(test_date, test_location, test_summary) VALUES ('" .sDate. "', '" .$location. "', '" .$summary. "')";

        $Result = mysql_query($Sql) or die(mysql_error());
        $new_id = MySql_Insert_Id();

这里是删除。

        $Sql1 = "DELETE FROM test_table";
        $Result1 = mysql_query($Sql1) or die(mysql_error());

【问题讨论】:

  • 显示您的插入语句
  • 你不是偶然重新创建了表吗?
  • 如果您不强制输入值,请检查您的插入语句。
  • 您确定使用 DELETE 吗?我知道 TRUNCATE 语句会重置自动增量。
  • 我用插入查询更新了我的问题。我确定我使用的是 DELETE 语句。这种情况一直在发生。我测试了好几次。

标签: php mysql


【解决方案1】:

使用不带 where 子句的 DELETE 与截断表相同,因此它们都重置表的 Next AutoIndex 值。 (这是人们通常想要/期望的)

在您的情况下,可以使用类似以下的方法来解决这个问题:

mysql_query( 冲刺f( "ALTER TABLE tbl_name AUTO_INCREMENT = %d", mysql_insert_id() + 1 ) );

(如果 DELETE 清除了插入值,那么您只需要在 DELETE / TRUNCATE 之前缓存它)

【讨论】:

  • 添加一个无意义的 WHERE 子句 (WHERE 1=1) 也可以吗? (我现在无法测试,也许值得一试@nav100)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2011-07-16
  • 2018-04-03
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
相关资源
最近更新 更多