首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在所有存储过程中更改表的模式名称

在存储过程中更改表的模式名称涉及以下步骤:

  1. 创建存储过程:首先,定义一个具有所需模式的存储过程。例如,如果您要从MyTable模式切换到NewTable模式,您需要创建一个存储过程rename_table(),其中执行ALTER TABLE语句将MyTable模式替换为NewTable模式。
  2. 编写存储过程代码
代码语言:sql
复制
DELIMITER $$
CREATE PROCEDURE rename_table()
BEGIN
  DECLARE old_name VARCHAR(64);
  DECLARE new_name VARCHAR(64);
  DECLARE cur CURSOR FOR SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', table_name, ' RENAME TO ', new_name, ';');
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET @ErrorMsg = ERROR_MESSAGE();
  
  OPEN cur;
  
  my_loop: LOOP
    FETCH cur INTO old_name;
    IF @ErrorMsg IS NULL THEN
      UPDATE INFORMATION_SCHEMA.COLUMNS SET DATA_TYPE = SUBSTRING_INDEX(SUBSTRING_INDEX(DATA_TYPE, '(', 1), ')', -1) WHERE TABLE_NAME = old_name AND DATA_TYPE LIKE '%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%\_%' AND DATA_TYPE NOT IN ('BLOB', 'TEXT', 'VARBINARY');
      SET @ErrorMsg = NULL;
    END IF;
    
    IF LEADING CHARACTER IN TABLE old_name REGEXP '^(A|b|B)$|^(0|1|2|3|4|5|6|7|8|9)$|^(a|A|b|B|c|C|d|D|e|E|f|F|g|G|h|I|j|J|k|K|m|M|n|O|p|P|q|Q|r|S|t|T|u|V|w|X|y|Y|z|Z|_{3})$' AND LEFT(old\_name, 1) NOT IN 'a|A|b|B|c|C|d|D|e|E|f|F|g|G|i|I|j|J|k|K|l|L|m|M|n|O|p|P|q|Q|r|S|t|U|v|W|w|X|y|Y|z'` AND TABLE\_SCHEMA <> 'information\_schema' THEN
      
      SET new_name = CASE WHEN REGEXP_CONTAINS(new_name, '{[a-zA-Z1-9]{1,255}') THEN SUBSTRING_INDEX(SUBSTRING_INDEX(new\_name, '{', 1), '}', -1)
                      WHEN REGEXP_CONTAINS(new\_name, '{[a-zA-Z0-9_]{1,255}') THEN SUBSTRING_INDEX(SUBSTRING_INDEX(new\_name, '{', 1), '}', -1)
                      ELSE SUBSTRING_INDEX(new\_name, '.', 1);
      
      REPLACE(new\_name, '__', '\\_');
      
      SET @ErrorMsg = NULL;
    END IF;
    
    IF old\_name ~ '.[a-zA-Z]{1,255}' THEN
      SET new\_name = CONCAT(new\_name, '_0');
    END IF;
      
    IF OLD\_NAME NOT IN (SELECT TABLE\_NAME FROM INFORMATION\_SCHEMA.TABLES WHERE TABLE\_SCHEMA = DATABASE()) THEN
      ALTER TABLE INFORMATION\_SCHEMA.TABLES ADD COLUMN TABLE\_NAME TEXT NOT NULL;  
    END IF;
       
    SET old\_name = new\_name;
    
    IF @ErrorMsg IS NOT NULL THEN
      LEAVE my\_loop;
    END IF;
  END LOOP my\_loop;
  
  DEALLOCATE PREPARE stmt;
  CLOSE cur;
END$$
DELIMITER ;
CALL rename_table();
  1. 运行存储过程:成功将表结构更改为新名称后,您可以使用执行该存储过程的原始表名的存储过程。
  2. 更新列数据类型和别名:完成更改后,运行以下查询更新INFORMATION\_SCHEMA.COLUMNS表以反映表名称更改:
代码语言:sql
复制
UPDATE I
SET DATA_TYPE = SUBSTRING_INDEX(SUBSTRING_INDEX(DATA_TYPE, '(', 1), ')', -1), TABLE\_NAME = NEW\_NAME WHERE TABLE\_Schema = DATABASE() AND TABLE\_Name = OLD\_NAME;
  1. 检查成功:完成上述步骤之后,您应该更改了表模式名称。重新运行存储过程以执行必要的表重新命名操作。

注意:在更改表模式名称时,务必要确保INFORMATION\_SCHEMA.COLUMNS只包含用于查询和修改表模式名称的信息,以便确保数据库的安全和完整性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何让所有实体类用相同名称的主键(很有力的问题,比如所有表实体主键都用ID)

例如:有两个表userbases和products 两个表的主键分别为UserID和ProductID,那么,我想问有没有一种方法把它们的主键统一起来,用一个字段名称表示呢?...接口,没错就是接口,我们知道接口中的一切,在它的实现类中都必须被实现,想一下,如果在接口中定义一个object类型或者string类型的字段,让所以子类都为它赋值,那不就OK了吗?.../// public interface IEntity { /// /// 为了主键统一,而手动设置的.../// string ID { get; } } 那如果有一个userbase实体类,它会继承这个统一接口,它的代码就变成了: public...:"+entity.ID); } } 在方法里调用: bobo b = new bobo(); b.hello(new Race { Id = 1

1.3K50
  • 编写高效SQL的三个基础原则

    数据库中的表构成了数据驱动应用程序的基础。处理一个混乱的模式,其中充满了令人困惑的名称和数据缺陷,是一项挑战。在名称清晰且数据干净的表上构建可以简化您的选择。...虽然您可以重命名它们,但您必须同时将所有代码更改为新名称。在大型代码库中,这是不切实际的。 那么,如果您正在使用一个充满神秘名称的模式,该怎么办?您是否永远被困住了?...好消息是有一些技巧可以用来阐明令人困惑的名称: 使用视图进行虚拟重命名。 添加模式元数据。 视图是存储的查询。您可以使用它们为表或列提供更易于理解的名称。...如果您更改表的主键或其唯一约束之一中的所有列,则会出现这种情况。在这种情况下,您正在更改行的标识符,因此其他值也可能会发生更改。 与糟糕的名称一样,未规范化的表在现有应用程序中难以更改。...在讨论规范化时,我们看到了如何存储测验答案的开始时间、结束时间和持续时间会导致不一致。虽然删除其中一列是最佳解决方案,但这在长期运行的应用程序中可能不切实际。

    6700

    编写高效SQL的三个基础原则

    数据库中的表构成了数据驱动应用程序的基础。处理一个混乱的模式,其中充满了令人困惑的名称和数据缺陷,是一项挑战。在名称清晰且数据干净的表上构建可以简化您的选择。...虽然您可以重命名它们,但您必须同时将所有代码更改为新名称。在大型代码库中,这是不切实际的。 那么,如果您正在使用一个充满神秘名称的模式,该怎么办?您是否永远被困住了?...好消息是有一些技巧可以用来阐明令人困惑的名称: 使用视图进行虚拟重命名。 添加模式元数据。 视图是存储的查询。您可以使用它们为表或列提供更易于理解的名称。...如果您更改表的主键或其唯一约束之一中的所有列,则会出现这种情况。在这种情况下,您正在更改行的标识符,因此其他值也可能会发生更改。 与糟糕的名称一样,未规范化的表在现有应用程序中难以更改。...在讨论规范化时,我们看到了如何存储测验答案的开始时间、结束时间和持续时间会导致不一致。虽然删除其中一列是最佳解决方案,但这在长期运行的应用程序中可能不切实际。

    8510

    查询hudi数据集

    一旦提供了适当的Hudi捆绑包, 就可以通过Hive、Spark和Presto之类的常用查询引擎来查询数据集。 具体来说,在写入过程中传递了两个由table name命名的Hive表。...增量视图是通过查询上表之一实现的,并具有特殊配置, 该特殊配置指示查询计划仅需要从数据集中获取增量数据。 接下来,我们将详细讨论在每个查询引擎上如何访问所有三个视图。...| | |extractSQLFile| 在源表上要执行的提取数据的SQL。提取的数据将是自特定时间点以来已更改的所有行。| | |sourceTable| 源表名称。在Hive环境属性中需要设置。...| | |targetTable| 目标表名称。中间存储目录结构需要。| | |sourceDataPath| 源DFS基本路径。这是读取Hudi元数据的地方。...该工具当前的局限性在于缺乏在混合模式(正常模式和增量模式)下自联接同一表的支持。

    1.8K30

    Oracle 20c新特性:TRANSFORM支持索引压缩

    在导入时重新创建这些对象时,数据泵会生成与导出时与那些对象的设置匹配的IM列存储子句。 如果在导入时指定了N,则数据泵将从具有一个的所有对象中删除IM列存储子句。...如果没有存储在表空间中的对象的IM列存储子句,则该对象将从表空间继承IM列存储子句。...如果值为 DEFAULT,则省略关键字(SECUREFILE或BASICFILE),并使用默认存储创建LOB段。 指定此转换会更改作业中所有表的LOB存储,包括为实例化视图提供存储的表。...如果在导入时指定了N,则: 在创建新对象表和类型的过程中,禁止分配导出的OID。而是分配一个新的OID。禁止分配导出的OID对克隆模式很有用,但不会影响引用的对象。...例如: TRANSFORM=TABLE_COMPRESSION_CLAUSE:\"COLUMN STORE COMPRESS FOR QUERY HIGH\" 指定此转换将更改作业中所有表的压缩类型,包括为实例化视图提供存储的表

    1K30

    Debezium 2.0.0.Final Released

    在本节中,我们将深入研究相关的更改,并讨论这些更改如何影响Debezium的所有用户。 依赖Java 11 我们想要向Java 11过渡已经有一段时间了,我们觉得Debezium 2.0是合适的时机。...由于多分区模式现在是默认的,这个新的database.names选项可以使用逗号分隔的数据库名称列表来指定,如下所示: database.names=TEST1,TEST2 在本例中,将连接器配置为从同一主机安装上的两个唯一数据库捕获更改...从Debezium 2.0 Beta2开始,许多连接器属性都用新的名称重新定位了。这是一个突破性的更改,会影响升级过程中的大部分连接器部署。 Debezium以前使用前缀“database.”...在以前的Debezium迭代中,一些模式定义没有显式名称,也没有显式版本控制。在这个版本中,我们已经开始确保所有模式定义都有一个显式的名称和与其相关联的版本。...但是,如果您目前正在使用Schema Registry来注册表结果,请注意此更改可能会在升级过程中导致模式兼容性问题。

    3.1K20

    解密openGauss DB4AI框架的内部机理

    由于已创建的快照无法更改,因此在开始数据整理之前,必须“准备”快照。准备好的快照的数据可以进行协作修改,为模型训练做准备,特别是为数据管理做准备。...此外,快照通过将每个操作作为元数据记录在DB4AI系统目录中,自动跟踪所有的更改,为数据提供完整的集成历史。 快照准备完成后,可以发布快照。...最后,清除快照,删除模式中的数据表以及视图、恢复存储空间。需要注意的是,快照管理为了实施严格的模型来源无法清除具有依赖的快照。 利用GUC参数,snapshot使用物化存储模式或者增量存储。...在增量存储模式中,新快照对应的视图和数据表只保存相对父快照修改的内容,从而大大降低存储空间。...在算子执行计算的过程中,把扫描得到的数据输入到算法模型中进行计算和更新,最后根据超参设置的迭代条件结束算子执行。

    63430

    HMS数据库设置和优化

    在此过程中,您将在与 HiveServer 不同的节点/集群上安装数据库,以便与 Hive、Impala、Spark 和其他组件共享 Hive 元存储 (HMS)。...一个循序渐进的过程向您展示了如何设置一些属性名称和值来代替hive set key=value在命令行上使用,这是不受支持的。...以相同的方式,在 Metastore 主机(必需)或所有主机(可选)上指定其他必需的连接属性,如下例所示。...优化元存储 与其他调优过程类似,一般 Metastore 调优涉及调整和测试,直到您发现可以提高 Metastore 性能的更改组合。调整建议包括硬件和软件更改。...通常的Metastore 调优 尝试进行以下更改以调整 HMS 性能: 确保单个查询访问不超过 10,000 个表分区。如果查询连接表,计算跨所有表访问的组合分区计数。 调整后端(RDBMS)。

    1.2K30

    使用管理门户SQL接口(二)

    可以在一个模式或多个模式中筛选模式,或筛选表/视图/过程名(项)。 搜索模式由模式名、点(.)和项目名组成——每个名称由文字和通配符的某种组合组成。字面值不区分大小写。...可选地,使用下拉“应用到”列表来指定要列出的项目类别:表、视图、过程、缓存查询,或以上所有。 默认为All。 在“应用到”下拉列表中指定的任何类别都受到筛选器或模式的限制。...在“应用到”中没有指定的类别继续在名称空间中列出该类别类型的所有项。 可选地,单击System复选框以包含系统项目(名称以%开头的项目)。 默认情况下不包含系统项。...Browse选项卡 Browse选项卡提供了一种方便的方式,可以快速查看名称空间中的所有模式,或者名称空间中经过过滤的模式子集。...方法或查询名称生成的类方法或类查询的名称;此名称在标识符和类实体名称中描述。运行过程链接提供交互方式的选项。 存储过程SQL语句:为此存储过程生成的SQL语句列表。与命名空间的SQL语句相同的信息。

    5.2K10

    Mysql服务器SQL模式 (官方精译)

    创建数据并将其插入分区表后,更改服务器SQL模式可能会导致此类表的行为发生重大变化,并可能导致数据丢失或损坏。强烈建议您一旦创建了使用用户定义分区的表格,就不要更改SQL模式。...如果您使用的是非事务性存储引擎,则这可能不是您想要的,因为在错误之前进行的数据更改可能无法回滚,从而导致“ 部分完成 ”更新。...无论是否IGNORE_SPACE启用,总是允许在UDF或存储的函数名称后面有空格 。 有关进一步讨论 IGNORE_SPACE,请参见 第9.2.4节“函数名称分析和解析”。...STRICT_ALL_TABLES 为所有存储引擎启用严格的SQL模式。无效的数据值被拒绝。有关详细信息,请参阅 严格SQL模式。...它还提供了确定应用程序是否需要修改以在SQL模式更改之前和之后表现相同的指导原则。 下表显示了如何控制MySQL 5.7.4到5.7.7以及MySQL 5.7.4到5.7.7以外版本的除零处理。

    3.4K30

    Oracle 在线重定义(上)

    REDEF_TABLE 当您想要更改以下属性时, 该过程使您能够在一个步骤中执行在线重新定义表的存储属性: 表空间更改,包括表、分区、索引或 LOB 列的表空间更改 压缩类型更改,包括表、分区、索引键或...此外,在重新定义过程完成或终止之前, 8)执行FINISH_REDEF_TABLE过程完成表的重新定义。在此过程中,原始表在很短的时间内以独占模式锁定,与原始表中的数据量无关。...在某些情况下,您可能希望撤消对表的在线重定义。 例如,表上的操作在重定义之后的性能可能比重定义之前的性能更差。 在这些情况下,可以将表回滚到其原始定义,同时保留重新定义后对表所做的所有DML更改。...在线表重定义回滚主要用于重定义更改表的存储特性,而这些更改意外导致性能下降的情况。...请注意,使用这种方法,重新定义后的表上的主键约束和索引的名称会发生变化。另一种避免错误和名称更改的方法是定义没有主键约束的临时表。在这种情况下,主键约束和索引是从原始表中复制的。

    36521

    「Hudi系列」Hudi查询&写入&常见问题汇总

    ROLLBACK - 表示提交/增量提交不成功且已回滚,删除在写入过程中产生的所有部分文件。 SAVEPOINT - 将某些文件组标记为"已保存",以便清理程序不会将其删除。...简而言之,映射的文件组包含一组记录的所有版本。 存储类型和视图 Hudi存储类型定义了如何在DFS上对数据进行索引和布局以及如何在这种组织之上实现上述原语和时间轴活动(即如何写入数据)。...通过在写入过程中执行同步合并以更新版本并重写文件。 读时合并 : 使用列式(例如parquet)+ 基于行(例如avro)的文件格式组合来存储数据。...| | |extractSQLFile| 在源表上要执行的提取数据的SQL。提取的数据将是自特定时间点以来已更改的所有行。| | |sourceTable| 源表名称。在Hive环境属性中需要设置。...所有文件都以数据集的分区模式存储,这与Apache Hive表在DFS上的布局方式非常相似。 11. 如何写入Hudi数据集 通常,你会从源获取部分更新/插入,然后对Hudi数据集执行写入操作。

    6.6K42

    升级到 MySQL 8.0,付出了惨痛的代价!

    这些表差异通常会导致复制和模式验证工具出现问题; 某些复制失败的错误代码发生了变化,我们必须修复我们的自动化程序来正确处理它们; 8.0 版本的数据字典废弃了 table.frm 文件,但是我们的一些自动化系统使用它们来检测表模式的修改...不幸的是,并非所有这些问题都是在测试过程中发现的。例如,事务死锁是应用程序在迁移过程中发现的。在研究不同的解决方案时,我们可以暂时将这些应用程序回滚到 5.6 版本。...我们限制了内存使用,只启用了少量的工具,并对代码进行了更改,以禁用无法手动关闭的表。 然而,并不是所有增加的内存都是分配给 performance_schema 的。...使用自动转义模式对象名称的 mysql 客户端软件,有助于减少兼容性问题的数量。 在一个副本集中支持两个主版本非常困难。一旦副本集将其主实例升级为 8.0,最好尽快禁用并移除 5.6 实例。...我们一直在考虑如何在 MyRocks 上支持像即时DDL这样的存储引擎特性。总的来说,新版本大大扩展了 MySQL@Facebook 的功能。

    1.5K20

    MySQL8 中文参考(八十)

    要解决源数据库、表或列名称在副本中被视为保留字的问题,请执行以下操作之一: 在源数据库上使用一个或多个ALTER TABLE语句来更改任何数据库对象的名称,其中这些名称在副本中被视为保留字,并将使用旧名称的任何...如果触发器需要代码中的多个结果值,可以将代码放入存储过程中,并使用OUT参数返回这些值。 删除表的所有触发器。 为表创建一个新的触发器,调用刚刚创建的存储过程。...因此,在使用STATEMENT模式时,此类语句的复制可能不安全。 default_storage_engine系统变量不会被复制,无论日志记录模式如何;这旨在促进不同存储引擎之间的复制。...在 MySQL 8.0.26 中,对复制仪器名称进行了不兼容的更改,包括线程阶段的名称,其中包含术语“master”,被更改为“source”,“slave”,被更改为“replica”,以及“mts”...有关组中版本兼容性的完整信息以及在升级过程中如何影响组行为,请参阅第 20.8.1 节,“在组中组合不同的成员版本”。

    13510

    深入解析MySQL 8:事务数据字典的变革

    一、事务数据字典的引入背景 在MySQL 8之前的版本中,元数据分散地存储在多个地方,包括元数据文件、非事务性表和特定于存储引擎的数据字典中。...这意味着所有的系统元数据,包括表结构、列信息、索引、触发器、存储过程和函数等,现在都存储在InnoDB表中,从而确保了元数据操作(如创建表、修改列等)的原子性、一致性和隔离性。...简化管理:不再需要维护多种不同类型的元数据文件和表,所有数据字典信息都集中存储在InnoDB表中,简化了数据库的管理和备份。...WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name'; 这个查询会返回指定数据库中指定表的所有列的名称...这些语句现在可以更高效地执行,并且在执行过程中提供了更好的并发性。

    14310

    SQL模糊查询语句(like)

    大家好,又见面了,我是你们的朋友全栈君。 确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。...下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,作者的姓将作为变量传递。...LIKE 'sys%' 说明 请注意:系统表可以随版本不同而更改。...推荐使用信息架构视图或适用的存储过程处理 SQL Server 系统表。 若要查阅非系统表的所有对象,请使用 NOT LIKE ‘sys%’。...可能仅得到 14 个名称(而不是 19 个),除了系统表名称外,所有以 s 开始或第二个字母为 y 或第三个字母为 s 的名称也都将从结果中消除。

    2.8K30

    Excel VBA 操作 MySQL(十一,十二,十三)

    在Excel VBA中对MySQL数据库中的表格进行操作,包括重命名和删除等,需要执行相应的SQL语句。...要获取有关MySQL数据库模式的信息,如表格结构、列信息等,可以使用SQL查询语句查询系统表格(System Tables)或信息模式(Information Schema)。...("Sheet1") ' 使用工作表的名称,你可以根据需要更改 Dim iRow As Integer iRow = 2 ' 从第二行开始,根据需要更改 Do Until...可以根据需要修改SQL查询语句和数据的显示方式,以满足不同的需求。这个示例只是一个基本的框架。在Excel VBA中生成MySQL数据库中的数据透视表需要使用PivotTable对象和数据透视表字段。...可以根据需要修改代码,以满足实际需求,例如更改查询语句、字段名称、数据透视表的位置和样式等。这个示例只是一个基本的框架,可以根据你的具体情况进行自定义。

    35511

    MySQL8 中文参考(八十三)

    这与在关系型数据库中工作并将产品存储在表中有所不同,因为在向数据库添加任何产品之前,必须知道和定义表的所有列。...例如,使用以下表达式更改字段的名称以仅返回两个文档。...在 MySQL 中,每个关系表都与特定的存储引擎相关联。本节中的示例使用 world_x 模式中的 InnoDB 表。 确认模式 要显示分配给 db 全局变量的模式,请发出 db。...显示所有表 要显示 world_x 模式中的所有关系表,请在 db 对象上使用 getTables() 方法。...您可以通过将文档存储在具有本机JSON数据类型的列中,将传统数据与 JSON 文档结合起来。 本节示例使用world_x模式中的 city 表。 city 表描述 city 表有五列(或字段)。

    15010
    领券