通过列名查找表,通过字段值查找所在表数据库列名

文章介绍了两个SQL存储过程:通过字段值查找特定数据库中的表并插入结果,以及通过列名查找information_schema中的表名。过程包括创建临时表、预处理语句和异常处理。
摘要由CSDN通过智能技术生成

一.通过字段值查找表(需要提供字段值和数据库的名称)

注意!!!会生成一张temp1的表,如果有会覆盖原来的表

DROP TABLE  if EXISTS temp1;
CREATE TABLE temp1(tablename VARCHAR(255),LieName VARCHAR(255));
 
# 将结束符改为//
delimiter //
DROP procedure IF EXISTS getDataByDbName//
# 两个必须的参数:数据库名dbName,字段名ziduan
CREATE procedure getDataByDbName(in dbName VARCHAR(255),IN ziduan VARCHAR(255))
BEGIN
DECLARE num INT;
SET @STMT =CONCAT("SELECT COUNT(*) FROM ",dbName,
" WHERE `",ziduan,"` LIKE BINARY '%字段值%' INTO @num;");
# 预处理
PREPARE STMT FROM @STMT;
EXECUTE STMT;
IF(@num>0) THEN
    INSERT INTO temp VALUES (dbName,ziduan);
END IF;
end//
delimiter ;
 
delimiter //
DROP PROCEDURE IF EXISTS searchAll//
CREATE PROCEDURE searchAll()
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE biao VARCHAR (255);
DECLARE ziduan VARCHAR (255);
DECLARE indexss CURSOR
FOR
SELECT TABLE_NAME,COLUMN_NAME FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA='数据库名称' ;
/*02000代表异常:
1.SELECT INTO语句或INSERT语句的子查询的结果为空表。
2.在搜索的UPDATE或DELETE语句内标识的行数为零。
3.在FETCH语句中引用的游标位置处于结果表最后一行之后。 */
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN indexss;
repeat
FETCH indexss INTO biao,ziduan;
call  getDataByDbName(biao,ziduan);
UNTIL done END repeat;
CLOSE indexss;
end//
delimiter ;
 
CALL searchAll();
 
SELECT * FROM temp;

二.通过列名查找表(需要提供列名)

SELECT table_name
FROM information_schema.columns
WHERE column_name = '查找的字段' ;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
查找数据库中包含特定字段和相应的,可以使用MySQL中的信息模式(information_schema)来实现。 首先,通过查询information_schema数据库中的COLUMNS,可以获取数据库中所有的列信息。具体查询语句如下: SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = '字段名称'; 其中,TABLE_SCHEMA数据库名称,TABLE_NAME表名称,COLUMN_NAME字段名称。将上述查询结果保存起来,得到包含特定字段和相应的列名。 接下来,通过遍历上述查询结果,使用动态SQL语句进行进一步查询,获得包含特定字段的具体。具体查询语句如下: SET @sql = ''; SELECT GROUP_CONCAT(DISTINCT CONCAT('SELECT \'', TABLE_NAME, '\' AS \'表名\',', COLUMN_NAME, ' AS \'\' FROM ', TABLE_SCHEMA, '.', TABLE_NAME) SEPARATOR ' UNION ALL ') INTO @sql FROM information_schema.COLUMNS WHERE COLUMN_NAME = '字段名称'; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; 其中,@sql是用来保存动态查询语句的变量。该查询语句会遍历前面得到的列名,并将相关的查询语句通过UNION ALL进行连接。最后通过PREPARE、EXECUTE和DEALLOCATE PREPARE来执行动态查询语句。 执行以上步骤后,会得到包含特定字段和对应的查询结果。 需要注意的是,上述查询语句只适用于查找一个特定字段的情况。如果需要查找多个字段,可以按照类似的逻辑进行扩展。同时,为了确保操作的安全性,建议在执行动态SQL语句前备份相关数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值