【问题标题】:SQL query to convert all primary keys to AUTO_INCREMENT? [closed]将所有主键转换为 AUTO_INCREMENT 的 SQL 查询? [关闭]
【发布时间】:2013-02-21 15:49:01
【问题描述】:

是否有任何我们运行的 SQL 查询,它会将每个表的主 ID 更新为 AUTO_INCREMENT(选中)?

【问题讨论】:

  • 你有多少张桌子?
  • 超过 300 或者 600 还没有算上它们。但是打开每个表并更新它需要很长时间。
  • 你可以写一个脚本。元数据存储在information_schema.TABLESinformation_schema.COLUMNS 中。 PK 以字符串'PRI' 的形式存储在COLUMNS.COLUMN_KEY 中。
  • 您需要遍历所有表,找到主键列并发出ALTER TABLE 语句来添加它。不过,您可能会遇到潜在的键冲突。
  • @MichaelBerkowski - 他为什么会遇到关键冲突?

标签: php mysql sql phpmyadmin


【解决方案1】:

这几乎不是一个真正的问题,但我今天心情很好,我会给你你需要的资源,从那里你可以了解如何处理这些资源以实现你的目标。

首先,列出数据库中的所有表:

  • list all tables in a database with MySQLi

    有很多方法。

    SHOW TABLES 是最简单的 SQL 语句。你可以 如果您想拥有更多信息,还可以查看 INFORATION_SCHEMA.TABLES 详细信息或进行一些过滤等。

    SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '你的数据库';

然后,遍历您的结果,然后对于每次迭代,您将 需要找到该表的主键:

  • Get primary key of table?

    更好的方法是使用 SHOW KEYS,因为您并不总是可以访问 信息架构。以下作品:

    SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
    Column_name will contain the name of the primary key.
    

现在使用给定表的列名,将列修改为使用该最大值自动递增。

最后,获取primary_key 列的max() 值并保存该数字,以便您可以使用此值设置此表的自动递增选项,因此自动递增行为将从正确的位置开始。

【讨论】:

    猜你喜欢
    • 2021-01-28
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多