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

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

注意!!!会生成一张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
    评论
一、约束:作用是保证数据的完整性和一致性 not null 示该字段数据不能为空 default 示该字段的默认 unique 唯一(唯一,组合唯一) primary key 主键 一张中只允许出现一个主键(not null + unique) auto-increment 自增长 foregin key 外键 建立两个之间的联系 语法 constraint fk_dep foreign key(关联名) references 被关联(被关联) on delete cascade 同步删除 on update cascade 同步更新 二、Mysql基本介绍 操作文件夹(库): 增加一个库:create database db1 charset utf8; 查看所有库: show databases; 查看特定库: show create database db1; 删库跑路: drop database db1; 操作文件(): 切换进数据库:use db1; 查看当前所在文件夹;select database( ); 增加:create table t1(id int,name char(6)); 查看特定:show create table t1; 查看所有:show tables;或者desc t1; 改: alter table t1 modify name char(10);name字段改为10字节; alter table t1 modify name NAME char(10);name字段名改成NAME 复制 即复制数据也复制结构:create table t1 select * from db1.t1; 只复制结构create table a1 like db1.t1; 清空 delete from t1;但是这种方法会保留自增的ID truncate table t1;这种方法不会保留自增ID 操作文件内容 增加内容:insert into (id,name) values(1,'aa'),(2,'bb'),(3,'cc'); 查看内容:select * from db1.t1; 删除内容:delete from t1 where id =1; 查看用户权限:select * from mysql.user where user='root'\G; 三、SQL数据类型 SQL之中没有bool,tinyint[1]示true;tinyint[0]示fasle. int数据类型后面存储的是显示宽度,而不是存储宽度,其他的数据类型则示的是存储宽度 now()sql中的内置函数,根据数据类型生成相对应的时间模式 char( )定长字符串,存储速度快,但是浪费空间 varchar( )变长字符串,存储速度慢,可是节省空间 enum() 示枚举 多选一 set( )示集合 多选多 七、索引 索引的作用:约束和加速查找 无索引的时候一般会 从前至后一条条查找 有索引的时候:创建索引的本质就是创造额外的文件,查询时先去额外的文件找,定好位置,再去原始直接查询,提高查询速度,但是增删改的速度依然慢,创建索引后必须命中索引才有效 索引的分类 1、普通索引:加速查询 加入索引:create index 索引名 on 名(名) 删除索引: drop index 索引名 on 名 查看索引:show index from 名 2、唯一索引:加速查找和唯一约束(可含null) 加入索引:create unique index 索引名 on 名(名) 删除:drop index 索引名 on 名 3、主键索引 加入索引:alter table 名 add primary key(名) 删除索引:alter table 名 drop primary key(名)和alter table 名 modify 名 int,drop primary key 4、组合索引:将多个组合成一个索引 创建组合索引:create iindex 索引名 on 名(1,2) 在使用组合索引时,若组合索引为(name,email),单独索引email时不走索引,这称为最左前缀匹配原则,最左匹配原则中,mysql会一直向右匹配知道遇到(< > between like)这一类的范围查询时停止 explain + sql查询语句,用于查询sql执行信息参数 在使用关键字‘like’查询时:like ‘n%’ 走索引;但是like ‘%n%’不走索引,即有且仅只有后面带上%时走索引 使用函数时索引不生效

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值