`

MYSQL存储过程处理表字段数据更新及索引

阅读更多
如题实现如下功能:
  • 表字段修改
  • 数据更新
  • 索引创建

DROP PROCEDURE if EXISTS create_column_index_for_xh_track_path_tb;

CREATE PROCEDURE create_column_index_for_xh_track_path_tb()
BEGIN
# 定义变量名称
DECLARE dbname VARCHAR(200) DEFAULT 'xht_ywp';
DECLARE tbname VARCHAR(200);
## 定义查询变量
DECLARE cursor_ CURSOR FOR 
         # 注意这里的正则匹配结尾是手机号注册的分表
         SELECT TABLE_NAME from information_schema.`TABLES` WHERE TABLE_NAME REGEXP "^xh_track_path_tb_[1][35678][0-9]{9}$";
# 打开游标
OPEN cursor_;
# 游标赋值
FETCH cursor_ into tbname;

my_tables_loop:LOOP
    # 获取单位编码
    SET @dwcode='';
    SET @dwcode_select=CONCAT('SELECT RIGHT("',tbname,'",11) INTO @dwcode');
    PREPARE dwcode_select FROM 	@dwcode_select;
    EXECUTE dwcode_select;
    # 查询是否可以修改
    SET @enable_alter = 0;
    SET @selec = CONCAT('SELECT count(*) INTO @enable_alter	FROM	information_schema.COLUMNS	WHERE		table_schema = "',dbname,'"	AND table_name = "',tbname,'"	AND column_name in ("STARTDATE","STOPDATE","NSJGID")');
    PREPARE selec FROM 	@selec;
    EXECUTE selec;
   
    # 可执行时执行修改
    IF (@enable_alter = 0 AND LENGTH(@dwcode)=11 AND tbname <> '' ) THEN
          # 开启事务处理
          START TRANSACTION;
          # ---------------------------------------新增分表字段------------------------
					# 新增修改字段语句
					SET @mysql_alter_startdate_column=CONCAT('ALTER TABLE ',tbname,' ADD STARTDATE DATETIME');
					PREPARE mysql_alter_startdate_column FROM	@mysql_alter_startdate_column;
					SET @mysql_alter_stopdate_column=CONCAT('ALTER TABLE ',tbname,' ADD STOPDATE DATETIME');
					PREPARE mysql_alter_stopdate_column FROM	@mysql_alter_stopdate_column;
					SET @mysql_alter_nsjgid_column=CONCAT('ALTER TABLE ',tbname,' ADD NSJGID VARCHAR(200)');
					PREPARE mysql_alter_nsjgid_column FROM	@mysql_alter_nsjgid_column;
          # 更新字段
	        EXECUTE mysql_alter_startdate_column;
          EXECUTE mysql_alter_stopdate_column;
          EXECUTE mysql_alter_nsjgid_column;

					# ---------------------------------------更新缺省数据------------------------
					# 更新日期字段的值
					SET @mysql_update_date_data=CONCAT('UPDATE ',tbname,' SET STARTDATE=DATE_FORMAT(START_TIME,"%Y-%m-%d 00:00:00"),STOPDATE=DATE_FORMAT(STOP_TIME,"%Y-%m-%d 00:00:00") WHERE (STARTDATE IS NULL) OR (STOPDATE IS NULL)');
					PREPARE mysql_update_date_data FROM	@mysql_update_date_data;
					# 更新组织机构数据
					SET @mysql_update_nsjg_data=CONCAT('UPDATE ',tbname,' A SET A.NSJGID=(SELECT B.NSJGID FROM XH_HLY_TB_',@dwcode,' B WHERE A.HLY_ID=B.HLY_ID) WHERE A.NSJGID IS NULL');
					PREPARE mysql_update_nsjg_data FROM	@mysql_update_nsjg_data;
          # 更新数据
          EXECUTE mysql_update_date_data;
          EXECUTE mysql_update_nsjg_data;
					# ---------------------------------------新增分表索引------------------------
					# 创建表对应索引列
					SET @mysql_create_hly_index=CONCAT('ALTER TABLE ',tbname,' ADD INDEX HLY_ID(HLY_ID)');
					PREPARE mysql_create_hly_index FROM	@mysql_create_hly_index;
					SET @mysql_create_startdate_index=CONCAT('ALTER TABLE ',tbname,' ADD INDEX STARTDATE(STARTDATE)');
					PREPARE mysql_create_startdate_index FROM	@mysql_create_startdate_index;
					SET @mysql_create_stopdate_index=CONCAT('ALTER TABLE ',tbname,' ADD INDEX STOPDATE(STOPDATE)');
					PREPARE mysql_create_stopdate_index FROM	@mysql_create_stopdate_index;
          # 创建索引
          EXECUTE mysql_create_hly_index;
					EXECUTE mysql_create_startdate_index;
					EXECUTE mysql_create_stopdate_index;
          # 提交事务
          COMMIT;
          # 赋值下一个游标
	  FETCH cursor_ INTO tbname;
    ELSEIF (@enable_alter = 0 AND LENGTH(@dwcode)<>11 AND tbname <> '')  THEN
          # 赋值下一个游标
	  FETCH cursor_ INTO tbname;
          #继续迭代
          iterate my_tables_loop;
    ELSE
          # 离开循环
          leave my_tables_loop;
    END IF;

end LOOP my_tables_loop;

CLOSE cursor_;

END

分享到:
评论

相关推荐

    mysql基本操作 5.查看表字段信息

    在实际工作中,我们可能还会遇到更多复杂的情况,如处理索引、视图、存储过程、触发器等。对于初学者来说,可以通过阅读官方文档、在线教程或参考书籍来深入学习MySQL。而提供的`5.查看表字段信息.txt`文件可能包含...

    mysql索引数据结构详解

    1. 避免 MySQL 给我们建立索引 Rowid,不用我们的表字段建立索引。 2. 避免 B+ 树的结构频繁变化,页结点分裂,表自动平衡。 3. 查询遵循必须按照索引顺序的规则:从最左边开始例如(bill,30) (bill 30 dev)可以...

    Mysql判断表字段或索引是否存在

    本篇文章将详细介绍如何在MySQL中判断表字段或索引是否存在,并提供相关的示例代码。 首先,我们来看如何判断表字段是否存在。在MySQL中,我们可以利用`information_schema.columns`系统表来查询当前数据库中的表...

    数据库表字段自定义

    本主题将深入探讨如何自定义数据库表字段,以及它的重要性、实现方式和最佳实践。 首先,我们要明白数据库表是数据组织的核心,而字段则是表的构成元素,它们决定了表能存储何种类型的数据。自定义字段意味着可以...

    MySQL.and.JSON

    6. **JSON 表字段**:MySQL 还支持在表设计时将 JSON 作为表字段,这样可以在一个传统的关系型表中嵌入复杂的数据结构,从而实现更丰富的数据模型。 7. **JSON 在 Web 开发中的应用**:由于 JSON 与 JavaScript 的...

    mysql学习实验过程.zip

    3. **数据类型**:理解MySQL中的各种数据类型,如INT、VARCHAR、DATE、TIME、DECIMAL等,它们决定了表字段可以存储的数据类型。 4. **数据库设计**:理解数据库设计的重要性,包括范式理论(第一范式、第二范式、第...

    MySQL中字符串索引对update的影响分析

    但对于update操作,所耗的时间却急剧上升,主要原因是在更新数据的同时,mysql会执行索引的更新。 下面做了一个简单的试验。 (1)首先对某个亿级记录的表字段所有记录执行更新: for idx in range(1, count+1): sql ...

    MySQL和Oracle项目案例 项目基本流程

    文件"03-mysql表仿照oracle表_脚本.sql"可能包含了这样的转换脚本,通过分析Oracle的表结构,定义MySQL的表字段、约束和索引,以确保数据迁移或交互时的一致性。 在实际项目中,数据库设计不仅包括表结构,还包括...

    GP数据库表结构转mysql库、oracle库 varchar类型字段长度批量处理excel_MYSQL_oracle_数据库

    描述中提到了“转mysql、数据库时表字段长度问题”,这暗示了在迁移过程中可能会遇到兼容性问题。转换表结构时,需要检查每个字段的数据类型和长度,确保在新环境中能正确存储数据。如果不做调整,可能会导致数据...

    ogr2ogr将shp文件导入到Mysql.zip

    - **数据类型不兼容**:检查Shapefile字段类型与MySQL表字段类型是否兼容,如有需要,可以使用 ogr2ogr 的 `-nlt` 参数指定几何类型。 6. **优化与注意事项**:为了提高性能,可以考虑使用InnoDB引擎代替MyISAM,...

    mysql企业管理器

    在MySQL企业管理器中,你可以直观地创建、修改和删除表字段,设置主键、外键、索引和触发器,确保数据完整性和一致性。 3. **数据操作**:该工具提供了丰富的数据操作功能,包括插入、更新、删除记录,以及执行SQL...

    MySQL-Front 小巧实用 MYSQL 数据库管理工具

    4. **数据库设计**:MySQL-Front支持创建和修改数据库结构,包括创建新表、修改表字段、设置索引、创建外键等。此外,还可以生成数据库脚本,用于备份或在其他环境中重建数据库结构。 5. **查询构建器**:为非技术...

    mysql数据库转oracle数据库工具

    4. 序列和自增ID处理:MySQL使用AUTO_INCREMENT关键字为表字段生成自增ID,而Oracle则通过序列(SEQUENCE)实现类似功能。转换工具需要处理这些自增ID,确保在Oracle中保持唯一性和连续性。 5. 权限和安全设置:...

    MySQL学习笔记(应癫老师).pdf

    数据库表字段的定义包括字段名称、数据类型、是否允许为空、默认值等属性,这些都必须在表创建阶段明确指定。 数据库管理系统(DBMS)是一套用于创建、操作、管理和查询数据库的软件工具。MySQL作为一个DBMS,提供...

    MySQL中文参考手册(HTML)

    5. **表和索引**:手册详细阐述了如何创建、修改和删除表,以及如何为表字段添加索引以提高查询速度,如主键索引、唯一索引、全文索引和复合索引等。 6. **视图**:视图是虚拟表,由一个或多个查询结果组成。手册将...

    MySQL 创建数据表.docx

    MySQL 是一种广泛使用的开源关系型数据库管理系统,它支持多种操作系统,并且提供了丰富的功能,包括数据表的创建、查询、更新和删除等操作。在MySQL中,创建数据表是构建数据库结构的基础步骤,它定义了表的结构,...

    mysql_using.zip_MYSQL

    了解基本的表字段类型如INT、VARCHAR、DATE等也至关重要。 6. **数据查询**:SQL的SELECT语句用于从数据库中检索数据,可以进行复杂的筛选、排序和分组操作。JOIN语句用于连接多个表,以获取跨表的数据。 7. **...

    MySQL DBA高频面试题

    - 使用ALTER TABLE语句为表字段添加索引。 11. 主从复制、MVCC机制与复制架构: - 主从复制:将主数据库的更新操作复制到从数据库。 - MVCC(多版本并发控制):一种用于实现并发控制的内部机制。 - 复制架构:...

    MySQL DBA运维笔记 超详细

    8.3 创建索引:讲解如何为表字段创建索引,包括主键索引、普通索引和联合索引等,以及索引对查询性能的影响。 以上内容对MySQL数据库的管理和操作进行了全面的介绍和说明,对于数据库管理员或数据库操作者来说,...

Global site tag (gtag.js) - Google Analytics