liwj 发表于 2022-9-25 09:31

备忘--MYSql_查询某内容在数据库中的表名和字段名

好久没发贴了,漏个脸,在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
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    declaretname2 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(" likebinary('小明') 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

atxz 发表于 2022-9-25 09:57

delimiter // -- 默认是分号; 这里表示 经过这个申明 不单止可以用分号表示语句结束停顿还可以使用// 表示语句结束停顿   这个我才知道,感谢分享,不过我我学的是MSSQL

无敌小儿 发表于 2022-9-26 12:45

怎么用呢

liwj 发表于 2022-9-26 19:55

输入数据库名称和字段号就可以了
页: [1]
查看完整版本: 备忘--MYSql_查询某内容在数据库中的表名和字段名