php - 数据库 |主键需要重置

标签 php mysql primary-key auto-increment

我有一个表,它使用主键(列名 = caseid)存储支持案例的 ID。

我现在大约有 100,000 个 caseid,这个数字太大了。我希望以某种方式从较低的数字开始,例如 1000。

我如何通过不必删除/归档现有记录并且不必将唯一的 caseid 更改为另一列(将其保留为主键列)来实现这样的事情

最佳答案

要重置Primary Key,您可以按照以下步骤操作:

  1. 创建结构与主表相同的临时表。假设表名是 tbl_cases

    CREATE TABLE tbl_cases_tmp LIKE tbl_cases;
    ALTER TABLE tbl_cases_tmp ADD old_caseid int NOT NULL DEFAULT '0';
    
  2. DUMPtbl_casestbl_cases_tmp 的所有数据。 caseid 将存储在 old_caseid 列中。

    INSERT INTO tbl_cases_tmp (name, summary, old_caseid)
    SELECT name, summary, caseid FROM tbl_cases;
    
  3. 对于任何其他引用了 tbl_cases 的表。比方说 tbl_reference

    UPDATE tbl_reference tr 
    JOIN tbl_cases_tmp tc
    ON tr.caseid = tc.old_caseid
    SET tr.caseid = tc.caseid;
    

在使用第 4 步和第 5 步之前,请确保您的表 tbl_cases_tmp 和所有引用都已正确更新。

  1. 删除 tbl_cases

    DROP table tbl_cases;
    
  2. tbl_cases_tmp 重命名为 tbl_cases

    RENAME TABLE tbl_cases_tmp TO tbl_cases;
    

关于php - 数据库 |主键需要重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33956377/

相关文章:

php - 生成一个随机的 10 位数字并插入到 mysql 中?

php - 具有多个表的oracle php回滚

php - MySQL 中出现 1064 错误但查询仍然完成?不知道为什么!

php - 反射异常 : Property $id does not exist

sql - 跨多个表添加序列值

php - Laravel-如何将作业从一个Redis队列移至另一Redis队列?

PHP:使用 future 12 个月的名称填充数组

mysql - 如何在 MySQL 中将 BLOB 转换为 DOUBLE

mysql:用与前一行相同的数字更新增量序列号

mysql - 在主键上创建和索引有什么好处吗?