show tables获得的表名结果怎样用于其他查询语句,类似子查询那样?

seai 2010-06-18 02:02:52
或者有没有其他办法实现:

目的是为了获取所有表名,并为每个表执行select count(*) from <tbl_name>;统计所有表的记录。
...全文
945 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangping_meng 2011-03-04
  • 打赏
  • 举报
回复
SELECT table_name,table_rows FROM information_schema.TABLES WHERE table_schema=DB_NAME;
ACMAIN_CHM 2010-06-18
  • 打赏
  • 举报
回复
[Quote]除了使用存储过程,mysql有类似pl/sql语句块的概念吗?[/Quote]目前的MYSQL版本中没有。只能在存储过程中实现。
WWWWA 2010-06-18
  • 打赏
  • 举报
回复
mysql没有匿名块,只有用SP
seai 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zuoxingyu 的回复:]

下面是我写的一个用来清理所有表的测试记录的存储过程,参数是数据库名称。
你可以改造一下,把DELETE FROM改成SELECT COUNT(*),然后把查出来的写到一个临时表里,最后再SELECT出来。这样这个存储过程就实现了你要的功能了。

SQL code

CREATE PROCEDURE Clear_DB(
DB_NAME varchar(50) #……
[/Quote]


除了使用存储过程,mysql有类似pl/sql语句块的概念吗?
zuoxingyu 2010-06-18
  • 打赏
  • 举报
回复
用程序来拼SQL,挺好。
iihero 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 seai 的回复:]

不错,顶了。

不过mysql4里不能使用“SELECT table_name FROM information_schema.TABLES”,除了通过程序来完成,有变通的方法实现:获取库中所有表的记录数吗?
[/Quote]
没有。 
seai 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zuoxingyu 的回复:]

下面是我写的一个用来清理所有表的测试记录的存储过程,参数是数据库名称。
你可以改造一下,把DELETE FROM改成SELECT COUNT(*),然后把查出来的写到一个临时表里,最后再SELECT出来。这样这个存储过程就实现了你要的功能了。

SQL code

CREATE PROCEDURE Clear_DB(
DB_NAME varchar(50) #……
[/Quote]


不错,顶了。

不过mysql4里不能使用“SELECT table_name FROM information_schema.TABLES”,除了通过程序来完成,有变通的方法实现:获取库中所有表的记录数吗?
wwwwb 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 seai 的回复:]
我说的不是程序,是纯粹数据库的方式,比如tsql语句等,mysql也有相应的语句吧。
[/Quote]

没有,在MYSQL中,只有用SP ,取得所有表名,打开游标,生成SQL语句,再动态执行
zuoxingyu 2010-06-18
  • 打赏
  • 举报
回复
下面是我写的一个用来清理所有表的测试记录的存储过程,参数是数据库名称。
你可以改造一下,把DELETE FROM改成SELECT COUNT(*),然后把查出来的写到一个临时表里,最后再SELECT出来。这样这个存储过程就实现了你要的功能了。


CREATE PROCEDURE Clear_DB(
DB_NAME varchar(50) # 数据库名称
)
BEGIN
DECLARE done INT DEFAULT 0; #游标的标志位
DECLARE a varchar(20);
DECLARE b varchar(20);
DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema=DB_NAME ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cur1;
REPEAT
FETCH cur1 INTO a;
IF NOT done THEN
set b=concat('Delete from ',DB_NAME,'.',a); # 拼删除命令
# set b=concat('TRUNCATE from ',DB_NAME,'.',a); # 拼删除命令
SET @E=b;
PREPARE stmt1 FROM @E;
EXECUTE stmt1; # 执行命令
DEALLOCATE PREPARE stmt1; #释放对象
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END;


ACMAIN_CHM 2010-06-18
  • 打赏
  • 举报
回复
SQL语句在MYSQL中无法实现,在MYSQL也只能通过存储过程来实现。

MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
seai 2010-06-18
  • 打赏
  • 举报
回复
我说的不是程序,是纯粹数据库的方式,比如tsql语句等,mysql也有相应的语句吧。
ACMAIN_CHM 2010-06-18
  • 打赏
  • 举报
回复
在你程序中可以直接处理 show tables ; 返回的结果集啊,就象处理 select * from xxx 一样,然后你再遍历这个 show tables 结果集。
1.查看有哪些数据库 2.新建数据库 3.使用数据库(在我们的密令行中要先使用数据库 才能进行相应的建表 查询等操作) 4.创建一个数据库表 create table 表名 ( id 类型 约束 , 列名 类型 约束 , 列名 类型 约束 ) 5.查看数据库表 6.查看数据库表结构 7.添加数据 A . insert into 表名 (列名1,列名2.。。。) values (值1,值2。。。) 注意:1 id 是主键自增的 所以我们添加的时候 不去管id 因为它会自动增加 2 在添加的时候 有多少列 就要有多少个值 3 并且类型要匹配 B. 注意 :1 没有添加列名 代表所有列都添加数据 (id,name , age) 所以我们的值 也需要 3个 (null,’zhangsan’,18) 2 因为id是自增 所以我们第一个值写 null C. 8.查询表中所有的数据 SELECT * FROM 表名; Where 条件 9.条件删除 delete from 表名 where 条件; 10.修改 Update 表名 set 列 = 值 ,列=值 where 条件 11.删除table 12.删除数据库 二.查询语句 13.查询语句 Select 列名 from 表名 查询出的结果 称之为 临时表 我们可以订制临时表有那些列 14.查询的时候 可以给 表 或者 列 起别名 Select 列名1 [as] 别名 , 列名2 [as] 别名2 from 表名 别名 15.去重查询 16.条件查询 练习1 年龄大于 25的学生 > < >= <= != <> = 17.多条件查询 & and || or 18.条件查询 (模糊搜索) like %零个或多个 _匹配一个 19.排序 order by 列名 注意 如果只写列名 代表 升序。 升序 asc 降序 desc 如果需要多列排序,可以指定第二排序原则 三.聚合函数 20.Count 查询有多少条数据 21.Max 查询某一列最大值 22.Min 查询某一列最小值 23.Avg 查询某一列的平均值 24.Sum 查询某一列的总和 25.分组查询 group by 列 26.分组条件查询 having 查询平均年龄大于25以上的班级和班级平局年龄 27.数据库分页语句 limit limit (索引,长度) 28.多表查询 Select 列名 from 表名1,表名2 29.笛卡尔乘积 (A,B) (c,d) => Ac Ad Bc Bd 30.内连接查询 A.隐式内连接 B.显示内连接 inner join on Select 列名 from 表 inner join 表1 on 条件 31.外连接查询 左外链接 需求:查询所有学生 如果有班级的 显示班级。 此时我们再去用内连接进行查询 那么 新学生查询不出来 所以我们需要用到外连接 left join on 左外链接 就是 左边表的数据全部查询 右边表符合条件的查询出来 右外链接 32.子查询 注意 子查询的结果 一定要和 另一个查询条件匹配

56,875

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧