mysql 查询指定库中的所有表的所有字符串字段的内容是否包括某些字符

 前置语句

查询指定库中的所以表和所有字段:

复制代码
SELECT
    a.TABLE_NAME '表名',
    ORDINAL_POSITION '顺序',
    COLUMN_NAME '字段',
    DATA_TYPE '类型',
    CHARACTER_OCTET_LENGTH '字节长',

IF(COLUMN_KEY = 'PRI', "√", "")'主键',

IF(
    EXTRA = 'auto_increment',
    "√",
    ""
)'自增长',

IF(IS_NULLABLE = 'YES', "√", "")'',
 CHARACTER_SET_NAME '编码',
 COLUMN_DEFAULT '默认值',
 COLUMN_COMMENT '说明'
FROM
    information_schema. COLUMNS a join information_schema.TABLES b
on a.TABLE_NAME=b.TABLE_NAME
WHERE b.Table_SCHEMA='database_name'
View Code
复制代码

 

复制代码
DROP PROCEDURE IF EXISTS `search_alltbl_allcol_ofkeyword`;
DELIMITER ;;
CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE `search_alltbl_allcol_ofkeyword`()
BEGIN
        declare sqlStr varchar(200) default '';  
    declare TABLENAME,COLUMNNAME,DATATYPE varchar(20);  

    declare done int default false;  
    declare cur cursor for select a.TABLE_NAME,COLUMN_NAME,DATA_TYPE FROM
            information_schema. COLUMNS a join information_schema.TABLES b
            on a.TABLE_NAME=b.TABLE_NAME
            WHERE b.Table_SCHEMA='getgoodwebsite';  
    declare continue HANDLER for not found set done = true;        
    open cur;  
    repeat  
    fetch cur into TABLENAME,COLUMNNAME,DATATYPE;  
    if not done then  
                if DATATYPE='varchar' THEN
                        #set @sqlStr='select * from '+TABLENAME+' where '+COLUMNNAME+' = ?';  
                        select DATATYPE;
                        #PREPARE stmt FROM @sqlStr;
                        #EXECUTE stmt USING @keyWord; 
                        #deallocate prepare stmt; 
                end if;
    end if;  
    until done end repeat;  
    close cur;  
END
;;
DELIMITER ;
View Code
复制代码

 存储过程:

复制代码
DROP PROCEDURE IF EXISTS `search_alltbl_allcol_ofkeyword`;
DELIMITER ;;
CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE `search_alltbl_allcol_ofkeyword`()
BEGIN
        declare sqlStr varchar(200) default '';  
    declare TABLENAME,COLUMNNAME,DATATYPE varchar(50);  
        
    declare done int default false;  
    declare cur cursor for select a.TABLE_NAME,COLUMN_NAME,DATA_TYPE FROM
            information_schema. COLUMNS a join information_schema.TABLES b
            on a.TABLE_NAME=b.TABLE_NAME
            WHERE b.Table_SCHEMA='数据库名';  
    declare continue HANDLER for not found set done = true;        
    open cur;  
    repeat  
    fetch cur into TABLENAME,COLUMNNAME,DATATYPE;  
    if not done then  
                if DATATYPE='varchar' or DATATYPE='text'  or DATATYPE='mediumtext' or DATATYPE='longtext'  or DATATYPE='char' THEN
                        set @keyWord:='敏感词汇';
                        set sqlStr=concat('select count(*) into @recordcount  from `',TABLENAME,'` where `',COLUMNNAME,'` like ''%',@keyWord,'%''');  
                        #select sqlStr;
                        set @sqlcounts := sqlStr;  
                        prepare stmt FROM @sqlcounts;
                        execute stmt; 

                        deallocate prepare stmt; 
                        
                        if @recordcount>0 THEN
                            SELECT concat(@sqlcounts);
                        end IF;
                end if;
    end if;  
    until done end repeat;  
    close cur;    
END
;;
DELIMITER ;
复制代码

 

问题1、

报错:The user specified as a definer ('skip-grants user'@'skip-grants host') does not exist

grant all privileges on *.* to 'skip-grants user'@'skip-grants host' identified by "."

 

posted @   三瑞  阅读(857)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2020-07-07 VS Code 调试 Angular 和 TypeScript 的配置
点击右上角即可分享
微信分享提示