`

MySQL表数据比较和Object全文搜索

阅读更多
  •  比较MySQL表中的数据:先需要过滤排除不需要比较的字段,比如timestamp字段等;然后再排序字段(先按关键字排序,再按非空的字段排序,最后按其他字段排序), 当然一般情形还需要加where 条件,下面写了一个函数来构造一个SQL 语句。
    CREATE DEFINER=`mysql`@`%` FUNCTION `f_toolkit_getFieldListFromTable`(`databaseName` varchar(255),`tableName` varchar(255),`is_RemoveTimestampField` boolean,excludeFiledlist varchar(1024)) RETURNS varchar(1024) CHARSET latin1
    BEGIN
    	DECLARE exception_occured TINYINT default 0;
    	DECLARE curr_field varchar(255);
      DECLARE curr_type varchar(255);
    	DECLARE curr_key  varchar(255);
      DECLARE curr_isnull varchar(10);
      DECLARE key_field_limit int DEFAULT 5;
    
    	DECLARE TMP_CUR CURSOR FOR 
                           select column_name, column_type,column_key,is_nullable from information_schema.columns where table_schema=trim(databaseName) and table_name=trim(tableName) and  locate(binary upper(column_name),binary upper(excludeFiledlist)) = 0 
                           order by column_key desc,IS_NULLABLE,ORDINAL_POSITION; 
    	
    	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,NOT FOUND SET exception_occured = 1;
    	set @result = '';
    	set @orderBy = '';
    	set @nonNull = '';
    	set @nonNull_no = 0;
    	set @nonKey_no = 0;
    	set @nonKeyFields = '';
    	OPEN TMP_CUR;
    	LOOP_LABLE:LOOP    
    	   FETCH TMP_CUR into curr_field,curr_type,curr_key,curr_isnull;
    	   IF exception_occured = 1 THEN              
    	      LEAVE LOOP_LABLE;
    	   END IF; 
    		 IF !(is_RemoveTimestampField && curr_type like 'timestamp') then 
    			 if @result = '' then 
    					set @result = curr_field;
    			 else
    					set @result = CONCAT(@result,',',curr_field);
           end if;
    			
    			set @nonKey_no = @nonKey_no + 1;
    			if @nonKeyFields  = '' then 
    				set @nonKeyFields = curr_field;
    			else 
    			 if @nonKey_no < key_field_limit then 
    					set @nonKeyFields = concat(@nonKeyFields,',',curr_field);
    			 end if;
    		 end if;
    		 if lower(curr_key) in ('pri','mul','uni') then 
    				if @orderBy = '' then 
    					 set @orderBy = curr_field;
    				else
    					 set @orderBy = CONCAT(@orderBy,',',curr_field);
    				end if;
    		 end if;
    		 if lower(curr_isnull) = 'no' && @nonNull_no < key_field_limit then 
    				if @nonNull = '' then 
    						set @nonNull = curr_field;
    				else
    						set @nonNull = CONCAT(@nonNull,',',curr_field);
    				end if;
    				set @nonNull_no = @nonNull_no + 1;
    				
    		 end if;
    				
    		 END IF;
    	END LOOP LOOP_LABLE;         
    	CLOSE TMP_CUR; 
    	if @orderBy = '' then 
    		if @nonNull = '' then
    			set @orderBy = @nonKeyFields;
    		else
    		  set @orderBy = @nonNull;
    		end if;
      end if;
    
    	RETURN CONCAT('select ', @result , ' from ', databaseName, '.', tableName, ' order by ', @orderBy);
    END
     
  • 常常要全文搜索object(如Field,table,view,procedure)被其他object引用(这里是包含或用到的意思),写了一个存储过程来完成(需要MySQL 5.1 及以上支持)
    CREATE DEFINER=`mysql`@`%` PROCEDURE `P_lookup_allObject_isUsing_Some_object`(`object` varchar(255))
    BEGIN
      set @v_obj_orginal = `object`;
      set `object` = concat('[^a-zA-Z_0-9]',ifnull(`object`,'null'),'[^a-zA-Z_0-9]');
      select name from (
            select concat(event_SCHEMA,'.',event_NAME) as name, 'event' as type from information_schema.events where EVENT_DEFINITION regexp `object`
      union   select concat(TRIGGER_SCHEMA,'.',TRIGGER_NAME) as name,'trigger' as type from information_schema.triggers where ACTION_STATEMENT regexp `object` or  ACTION_CONDITION regexp `object`  union select concat(ROUTINE_SCHEMA,'.',ROUTINE_NAME) as type, ROUTINE_TYPE from information_schema.routines where ROUTINE_DEFINITION regexp `object`
     union select concat(TABLE_SCHEMA,'.',TABLE_NAME) as name, 'view' as type from information_schema.views where VIEW_DEFINITION regexp `object`
     union select concat(db,'.',`name`) as name, type from mysql.proc where body regexp `object`
     union select concat(TABLE_SCHEMA,'.',TABLE_NAME) as name, 'column' as type from information_schema.`COLUMNS` where COLUMN_NAME like @v_obj_orginal
     union select concat(db,'.',`name`) as name, 'event' as type from mysql.`event` where body regexp `object`) as Q order by type, name;
    
    END
     
0
1
分享到:
评论

相关推荐

    全国快递物流查询 阿里云 物流公司 mysql数据 与 json数据

    其次,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于阅读和编写,同时也易于机器解析和生成,而被广泛应用在网络通信中。在物流查询系统中,当用户请求特定包裹的信息时,服务器会从...

    java、mysql以及oracle数据类型对照表

    标题"java、mysql以及oracle数据类型对照表"揭示了本主题的核心,即比较Java、MySQL和Oracle数据库的数据类型。Java的数据类型主要分为基本类型(如int、double、boolean)和引用类型(如类、接口和数组)。MySQL和...

    基于Mysql的表转HBase小Demo

    首先,创建或检查HBase表是否存在,然后根据设计的HBase表结构,将Mysql数据转化为HBase的Put对象,并提交到表中。 4. **单元测试**:提供的单元测试文件用于验证数据转换的正确性。通常会模拟一些基本操作,如插入...

    mysql和Oracle在对clob和blob字段的处理

    - 存储机制:MySQL的`TEXT`和`BINARY`系列数据类型通常存储在数据页中,而Oracle的`CLOB`和`BLOB`可以存储在表空间中,允许更大的数据量。 - 索引支持:Oracle支持对`CLOB`和`BLOB`字段建立索引,而MySQL的索引...

    使用servlet,jdbc将mysql中数据显示在jsp页面中

    Model代表数据模型,由JavaBean或DAO(Data Access Object)实现;View是用户界面,即JSP页面;Controller是Servlet,负责处理请求和响应。此外,为了提高代码的可维护性和可复用性,还可以引入Spring框架,它提供了...

    oracle mysql sqlser2000对大数据对象的操作

    在IT领域,数据库管理系统(DBMS)如Oracle、MySQL和SQL Server 2000是处理大量数据的核心工具。这些系统对于大数据对象的操作至关重要,尤其是对于存储图像、音频、视频等非结构化数据的企业级应用。本文将深入探讨...

    mysql存储和显示图片

    接着连接到MySQL服务器并将图片数据插入到之前创建的`Images`表中。 #### 五、从MySQL数据库中检索并显示图片 存储图片后,还需要能够从数据库中检索这些图片并在Web页面上显示它们。这通常涉及到从数据库中查询...

    汽车之家车系大全json+mysql+logo+车图

    标题“汽车之家车系大全json+mysql+logo+车图”揭示了...使用这些数据,开发者可以轻松构建一个能够展示汽车信息、搜索车系、比较不同型号的平台。同时,数据分析人员也可以利用这些数据进行汽车市场的研究和趋势分析。

    深入分析使用mysql_fetch_object()以对象的形式返回查询结果

    PHP提供了一系列用于从数据库结果集中检索数据的函数,其中`mysql_fetch_object()`函数允许开发者以对象的形式来获取查询结果,这在某些场景下提供了便利。本文将详细介绍`mysql_fetch_object()`函数的工作原理,...

    Android+Json+SSM+MySQL后台数据交互模拟云备份云恢复(源码)

    4. **MySQL**:MySQL是一款开源的关系型数据库管理系统,被广泛应用于互联网应用,提供高效、可靠的数据存储和检索功能。在SSM框架中,MyBatis通常用于与MySQL进行数据交互,执行CRUD操作。 描述中的链接指向了一个...

    实现blob类型数据上传至MySQL数据库.rar

    在这种情况下,`BLOB`(Binary Large Object)数据类型是MySQL数据库用来存储大对象的理想选择。本文将详细介绍如何在JSP页面上实现`BLOB`类型数据的上传,并将其存储到MySQL数据库中。 首先,理解`BLOB`类型:`...

    MYSQL数据库转成文档

    在本场景中,我们使用Java技术来实现这一目标,将MySQL数据库的表转换成Word文档,这样用户可以方便地浏览和搜索数据。 要完成这个过程,首先我们需要连接到MySQL数据库。这可以通过Java的JDBC(Java Database ...

    基于Python的实现Mysql中存储Json数据.zip

    当这两种技术结合在一起时,我们可以构建高效的数据存储和检索系统。 在描述中提到的"各领域数据集"可能包括各种结构化和非结构化的数据,其中JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,常...

    c# MySql数据库存储图片

    表通常会包含一个`BLOB`(Binary Large Object)字段,用于存储二进制数据。例如,创建一个名为`Images`的表,结构如下: ```sql CREATE TABLE Images ( ID INT AUTO_INCREMENT PRIMARY KEY, ImageData LONGBLOB,...

    JAVA+MYsql学生信息管理系统

    4. **持久化层**:通过数据库设计和优化,保证数据的持久化存储和高效检索。 四、系统实现流程 1. **需求分析**:明确系统功能,如学生信息录入、成绩管理、报表生成等。 2. **数据库设计**:根据需求设计表结构...

    MySQL.and.JSON

    MySQL 是全球最受欢迎的关系型数据库管理系统(RDBMS),而 JSON(JavaScript Object Notation)是广泛使用的轻量级数据交换格式。两者结合,使得在数据库中存储和操作结构化数据变得更加灵活和高效。 MySQL 从 5.7...

    2018-09-15最新整理三级联动mysql文件以及json数据文件

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在本例中,可能包含了一个或多个JSON文件,这些文件将省市区数据以键值对的形式表示,便于前端...

    MySQL Interview Questions.pdf

    MySQL 数据库查询是指使用 SQL 语言来从数据库中检索或操作数据。 8. 有哪些常用的 MySQL 命令? 常用的 MySQL 命令包括 SELECT、INSERT、UPDATE、DELETE 等。 9. 如何在 MySQL 中创建数据库? 使用 CREATE ...

    安卓进行照片在mysql云数据库端读取

    MySQL是一种关系型数据库管理系统,支持多种数据类型,包括BLOB(Binary Large Object),这使得它能够存储图像和其他二进制数据。在设置数据库时,你需要创建一个表,包含用于存储照片的BLOB字段,以及可能的其他...

    PHP+Mysql+FullCalendar日历拖动与数据保存

    它连接到MySQL数据库,执行SQL查询以存储和检索事件数据。 **MySQL**:MySQL是一个关系型数据库管理系统,用于存储和管理项目中的日历事件数据。通过PHP,我们可以创建一个数据库表,包含如事件ID、标题、开始时间...

Global site tag (gtag.js) - Google Analytics