"show tables"MySQL 쿼리에서 데이터 선택
show tables
MySQL 에서 선택할 수 있습니까?
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
성명서의 일부로 사용하려는 이유를 이해할 수 없습니다 .
ReferenceURL : https://stackoverflow.com/questions/64894/select-data-from-show-tables-mysql-query
'IT이야기' 카테고리의 다른 글
React Component에서 이미지 (.svg, .png)를 가져 오는 방법 (0) | 2021.03.26 |
---|---|
null 인 경우에도 두 "ref"변수가 동일한 변수를 참조하는지 확인하는 방법 (0) | 2021.03.26 |
순환 복잡성이 유용한 측정 (0) | 2021.03.25 |
R에서 행 인덱스 번호를 얻는 방법 (0) | 2021.03.25 |
Javascript에서 var를 사용하는 경우 (0) | 2021.03.25 |