吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 921|回复: 3
收起左侧

[学习记录] 备忘--MYSql_查询某内容在数据库中的表名和字段名

[复制链接]
liwj 发表于 2022-9-25 09:31
好久没发贴了,漏个脸,在MYSql_查询某内容所在的表名和字段名
delimiter // -- 默认是分号; 这里表示 经过这个申明 不单止可以用分号表示语句结束停顿  还可以使用// 表示语句结束停顿
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
DROP table if exists temp;
create table temp(-- 创建表格  用于存储返回结果
   
    tName varchar(255),
    tZiDuan varchar(255)
   
)default charset=utf8;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
DROP PROCEDURE if EXISTS p1 //
create procedure p1() -- 相当于excel sub
begin
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    declare  tname2 varchar(255) character set utf8;
    declare cname2 varchar(255)  character set utf8;-- 游标用来存储字符串 所以要特别说明一下utf8
    declare done int default 0;
   
    -- 声明游标
    declare mc cursor for SELECT c.TABLE_NAME , c.COLUMN_NAME FROM information_schema.`COLUMNS` c WHERE c.TABLE_SCHEMA = 'gjj'; -- mc 存储的是第一行
    declare continue handler for not found set done = 1;
    -- 打开游标
    open mc;
xxx:loop-- 开始循环
    -- 获取结果
    fetch mc into tname2,cname2;-- 传递游标存储给变量
    -- 这里是为了显示获取结果
   -- select tname2,cname2; -- 结果1
        set @one = CONCAT("SELECT COUNT(*) FROM ",tname2," t"," WHERE ");-- 花费了好多时间的地方:字段名不可以被单引号引着 而是键盘左上角第二行第一列 首个按键(英文状态下``) ``
    set @two = concat("t.`",cname2,"`" ); -- 特别小的细节 加的是单引号 而是键盘左上角第二行第一列 首个按键(英文状态下``) ``
    set @three = CONCAT(" like  binary('小明') INTO @Num ;"); -- 找到小明 这列的统计数存储到了@num  
set @STMT = CONCAT(@one,@two,@three);
     -- SELECT @STMT;
    PREPARE stmt FROM @STMT;
    EXECUTE stmt;-- 执行预处理
    DEALLOCATE PREPARE stmt;-- 释放预处理指针
    -- SELECT @num; -- 结果2
    IF (@num >0 ) THEN -- @num 这种变量是用户自定义变量,可以直接使用 @num = @num + 1;
    INSERT INTO temp(tName,tZiDuan) VALUES (tname2,cname2);-- 给表格添加行  这里本质是存储返回结果 把符合条件的结果存储到这个temp表中
   
    END if;
   
          if done = 1 then
             leave xxx;-- 退出循环
          end if;
           
   end loop;
    SELECT * from temp;
      -- 关闭游标
    close mc;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   
end //
delimiter ;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   
call p1();-- 启动prcedure
查询某内容在数据库中的表名和列名.jpg

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lcg2014 + 1 + 1 这个可以有,谢谢分享

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

atxz 发表于 2022-9-25 09:57
delimiter // -- 默认是分号; 这里表示 经过这个申明 不单止可以用分号表示语句结束停顿  还可以使用// 表示语句结束停顿   这个我才知道,感谢分享,不过我我学的是MSSQL
无敌小儿 发表于 2022-9-26 12:45
 楼主| liwj 发表于 2022-9-26 19:55
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表