2013-02-22 140 views
0

假设数据库的表的数据量很大(200+),我该如何执行SELECT * FROM <> LIMIT 3;,其中<>代表数据库中的所有表?我的目标是了解每个表格包含的内容,并且DESCRIBE中显示的列名称不是特别有用。所以我想看看每个表格的3条记录。从每个表中选择3个结果

我知道我可以通过遍历show tables;的输出来轻松地在PHP中编写脚本,但是我正在寻找一个命令在MySQL解释器上运行(mysql>提示符)。

回答

1

它的详细此链接中所述(还没有尝试过自己,虽然,这只是我的书签):

http://www.youdidwhatwithtsql.com/mysql-clone-of-sp_msforeachtable/624

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `usp_mysql_foreachtable`$$ 

CREATE PROCEDURE `usp_mysql_foreachtable`(IN sql_string VARCHAR(1000)) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    COMMENT 'Functional clone of sp_MsForEachTable' 
    BEGIN 

    DECLARE var_tablename VARCHAR(100); 
    DECLARE last_row BIT; 

    DECLARE table_cursor CURSOR FOR SELECT TABLE_NAME 
        FROM information_schema.TABLES 
        WHERE TABLE_TYPE = 'BASE TABLE' 
        AND TABLE_SCHEMA = DATABASE(); 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET last_row = 1; 

    OPEN table_cursor; 
    FETCH table_cursor INTO var_tablename; 

    SET last_row = 0; 
    SET @var = ''; 

    lbl_table_cursor: LOOP 

     SET @qry = REPLACE(sql_string, '?', var_tablename); 

     PREPARE q FROM @qry; 
     EXECUTE q; 
     DEALLOCATE PREPARE q; 

     FETCH table_cursor INTO var_tablename; 
     IF last_row = 1 THEN 
      LEAVE lbl_table_cursor; 
     END IF; 
    END LOOP lbl_table_cursor; 

    CLOSE table_cursor; 

    END$$ 

DELIMITER ; 

然后你

CALL usp_mysql_foreachtable('SELECT * FROM ? LIMIT 3;'); 
+0

叫它谢谢!链接的网站还有其他一些精彩的文章。 – dotancohen 2013-02-22 12:51:26