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

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

目的是为了获取所有表名,并为每个表执行select count(*) from <tbl_name>;统计所有表的记录。
...全文
998 12 打赏 收藏 转发到动态 举报
写回复
用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 结果集。

57,062

社区成员

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

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