IT이야기

"show tables"MySQL 쿼리에서 데이터 선택

cyworld 2021. 3. 26. 20:45
반응형

"show tables"MySQL 쿼리에서 데이터 선택


show tablesMySQL 에서 선택할 수 있습니까?

SELECT * FROM (SHOW TABLES) AS `my_tables`

위의 내용은 작동하지 않지만이 라인을 따라 무언가가 있습니다 (최소한 5.0.51a에서는).


당신이 원하는 것 같아요 SELECT * FROM INFORMATION_SCHEMA.TABLES

참조 http://dev.mysql.com/doc/refman/5.0/en/tables-table.html를


INFORMATION_SCHEMA다른 사람들이 언급했듯이 에서 선택하지 않는 한 내가 알지 못합니다 .

그러나 SHOW명령은 매우 유연합니다. 예 :

SHOW tables like '%s%'

계산하기:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;

나열하려면 :

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;

INFORMATION_SCHEMA.Tables 쿼리를 살펴 보셨습니까? 에서와 같이

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;

생각보다 더 가까이있을 수 있습니다. SHOW TABLES는 이미 SELECT와 매우 유사하게 작동합니다.

$pdo = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}

SHOW예제와 같이 하위 쿼리 안에 문을 넣을 수 없습니다 . 하위 쿼리에 들어갈 수있는 유일한 문은 SELECT.

다른 답변에서 언급했듯이 INFORMATION_SCHEMA를 직접 쿼리하여 SELECT훨씬 더 많은 유연성을 얻을 수 있습니다.

MySQL의 SHOW문은 내부적으로 INFORMATION_SCHEMA 테이블에 대한 쿼리입니다.

사용자 @physicalattraction이 대부분의 다른 답변에이 댓글을 게시했습니다.

이것은 OP가 의도 한대로 테이블의 내용이 아닌 테이블에 대한 (메타) 정보를 제공합니다. - 신체적 매력

반대로 OP의 질문은 모든 테이블에서 데이터를 선택하고 싶다고 말하지 않습니다 . 그들은 SHOW TABLES테이블 이름 목록 인의 결과에서 선택하고 싶다고 말합니다 .

OP가 모든 테이블에서 모든 데이터를 선택하려는 경우 대답은 '아니요'입니다. 하나의 쿼리로 수행 할 수 없습니다. 각 쿼리는 테이블 이름을 명시 적으로 지정해야합니다. 테이블 이름을 변수 또는 동일한 쿼리의 다른 부분의 결과로 만들 수 없습니다. 또한 주어진 쿼리 결과의 모든 행에는 동일한 열이 있어야합니다.

따라서 모든 테이블에서 모든 데이터를 선택하는 유일한 방법은 실행 SHOW TABLES한 다음 해당 결과에 이름이 지정된 각 테이블에 대해 다른 쿼리를 실행하는 것입니다.


나는 당신이 원하는 것이 MySQL의 information_schema view (s)라고 생각합니다 : http://dev.mysql.com/doc/refman/5.0/en/tables-table.html


SELECT * FROM INFORMATION_SCHEMA.TABLES

좋은 시작이되어야합니다. 자세한 내용은 INFORMATION_SCHEMA 테이블을 확인하십시오 .


SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

그러면 myTable.myColumnName에 대한 주석이 반환됩니다.


저장 프로 시저를 만들고 테이블 이름을 커서에 넣은 다음 테이블 이름을 반복하여 데이터를 표시 할 수 있습니다.

저장 프로 시저 시작하기 : http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

커서 만들기 : http://www.mysqltutorial.org/mysql-cursor/

예를 들면

CREATE PROCEDURE `ShowFromTables`()
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";

DECLARE table_cursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';

DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1;

OPEN table_cursor;

get_data: LOOP

FETCH table_cursor INTO c_table;

IF v_finished = 1 THEN 
LEAVE get_data;
END IF;

SET @s=CONCAT("SELECT * FROM ",c_table,";");

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP get_data;

CLOSE table_cursor;

END

그런 다음 저장 프로 시저를 호출합니다.

CALL ShowFromTables();

예, table_schema의 SELECT는 시스템 관리에 매우 유용 할 수 있습니다. 서버, 데이터베이스, 테이블이 많은 경우 때때로 요소를 삭제하거나 업데이트해야합니다. 예를 들어 접두사 이름이 "wp_old _..."인 모든 테이블을 DROP하기위한 쿼리를 생성하려면 :

SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';

MySql 5.1에서 시도해 볼 수 있습니다.

show tables like 'user%';

산출:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)

SELECT * FROM성명서의 일부로 사용하려는 이유를 이해할 수 없습니다 .

12.5.5.30. SHOW TABLES 구문

ReferenceURL : https://stackoverflow.com/questions/64894/select-data-from-show-tables-mysql-query

반응형