【问题标题】:script to remove primary key from multiple tables of a database in MySQL从 MySQL 中数据库的多个表中删除主键的脚本
【发布时间】:2021-07-19 14:58:33
【问题描述】:

我的数据库中有很多表,每个表都有主键、唯一键和自动增量。我想删除所有这三个。我如何在脚本中执行此操作,而无需为数据库中的每个表手动执行此操作。是否有任何自动化脚本可以一次将所有这些内容删除到数据库的所有表中。

(来自评论)

CREATE TABLE emp3 (
    id int NOT NULL, 
    name varchar(30) DEFAULT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY c_unique (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

【问题讨论】:

  • 只需执行 CREATE TABLE new_table SELECT * FROM old_table - 新表将不包含索引和 AI 属性。
  • @Akina - 但是你需要重新启用一些 PK,以及任何有用的索引。
  • 您的问题的答案是否定的,没有自动脚本可以一次将所有这些都删除到所有表中。 ALTER TABLE 一次作用于一张表。

标签: mysql database database-design primary-key


【解决方案1】:

如果您使用的是ENGINE=InnoDB,那么您确实需要在每个表上都有一个PRIMARY KEY。

如果表之间有JOINs,则需要避免删除JOINing所在的列。

PK、唯一键和 AI 列在表中的命名是否一致?

请向我们展示一个示例SHOW CREATE TABLE,以便我们根据您的需求量身定制答案。

答案将包括类似

SELECT
    CONCAT("ALTER TABLE ", table_name, "... ;")
    FROM information_schema
    WHERE table_schema = 'db_name';

关于如何使用“mysql”命令行工具或存储过程来执行创建的命令的说明。

【讨论】:

  • SELECT CONCAT("ALTER TABLE ", table_name, "... ;") FROM information_schema WHERE table_schema = '...'; where 条件下的 table_schema 将是什么
  • 创建表emp3(id int 主键auto_increment, name varchar(30), constraint c_unique unique(name));这是用于创建表的示例
  • @shubhijain - “表模式”是“数据库”的同义词。
  • 'emp3', 'CREATE TABLE emp3 (\n id int NOT NULL,\n name varchar(30) 默认为 NULL,\n 主键 (id), \n UNIQUE KEY c_unique (name)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci' 这就是 show create table 给出的。请帮我根据这个量身定制答案
  • @shubhijain - 看起来不错,只是缺少 AUTO_INCREMENT。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2011-10-23
  • 2014-08-30
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
相关资源
最近更新 更多