0

途方もない量のテーブル (200 以上) を持つデータベースを想定すると、データベース内のすべてのテーブルを表すSELECT * FROM <> LIMIT 3;場所をどのように実行できますか? <>私の目標は、各テーブルに何が含まれているかを理解することであり、図に示されている列名DESCRIBEは特に役に立ちません。したがって、各テーブルから 3 つのレコードを表示したいと思います。

の出力を繰り返し処理することで、PHP でこれを簡単にスクリプト化できることはわかっていますが、MySQL インタープリター (プロンプト)show tables;で実行するコマンドを探しています。mysql>

4

1 に答える 1

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;');
于 2013-02-22T12:03:13.607 に答える