或者有没有其他办法实现:目的是为了获取所有表名,并为每个表执行select count(*) from <tbl_name>;统计所有表的记录。

解决方案 »

  1.   

    在你程序中可以直接处理 show tables ; 返回的结果集啊,就象处理 select * from xxx 一样,然后你再遍历这个 show tables 结果集。
      

  2.   

    我说的不是程序,是纯粹数据库的方式,比如tsql语句等,mysql也有相应的语句吧。
      

  3.   

    SQL语句在MYSQL中无法实现,在MYSQL也只能通过存储过程来实现。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  4.   

    下面是我写的一个用来清理所有表的测试记录的存储过程,参数是数据库名称。
    你可以改造一下,把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;
      

  5.   


    没有,在MYSQL中,只有用SP ,取得所有表名,打开游标,生成SQL语句,再动态执行 
      

  6.   

    不错,顶了。不过mysql4里不能使用“SELECT table_name FROM information_schema.TABLES”,除了通过程序来完成,有变通的方法实现:获取库中所有表的记录数吗?
      

  7.   

    除了使用存储过程,mysql有类似pl/sql语句块的概念吗?
      

  8.   

    目前的MYSQL版本中没有。只能在存储过程中实现。
      

  9.   

    SELECT table_name,table_rows FROM information_schema.TABLES WHERE table_schema=DB_NAME;