2008-09-15 26 views

Respuesta

4

¿Has consultado en consultar INFORMATION_SCHEMA.Tables? Al igual que en

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; 
+3

Esta g le proporciona (meta) información sobre las tablas, no sobre el contenido de la tabla, como lo pretendía el PO. – physicalattraction

2
SELECT * FROM INFORMATION_SCHEMA.TABLES 

que debe ser una buen comienzo. Para obtener más información, consulte INFORMATION_SCHEMA Tables.

+4

Esto le brinda información (meta) sobre las tablas, no sobre el contenido de la tabla, como lo pretendía el OP. – physicalattraction

2

No entiendo por qué quiere usar SELECT * FROM como parte de la declaración.

12.5.5.30. SHOW TABLES Syntax

+4

El OP quiere extraer datos de las Tablas devueltas por SHOW TABLES, no tiene información sobre las Tablas. – physicalattraction

19

No, que yo sepa, a menos que seleccione a partir INFORMATION_SCHEMA, como otros han mencionado.

Sin embargo, el comando SHOW es bastante flexible y Ej:

SHOW tables like '%s%' 
+5

Esto le brinda información (meta) sobre las tablas, no sobre el contenido de la tabla, como lo pretendía el PO. – physicalattraction

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

Esto devolverá el comentario sobre: ​​myTable.myColumnName

+3

Esto le brinda (meta) información acerca de las tablas, no el contenido de la tabla, como lo pretendía el OP. – physicalattraction

2

Sí, Seleccionar del esquema_tabla podría ser muy útil para administracion del sistema. Si tienes muchos servidores, bases de datos, tablas ... a veces necesitas DROP o UPDATE montón de elementos. Por ejemplo, para crear la consulta para la caída de todas las tablas con el prefijo del nombre "wp_old _...":

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

Esto le brinda (meta) información acerca de las tablas, no el contenido de la tabla, como lo pretendía el OP. – physicalattraction

1

en MySQL 5.1 se puede tratar

show tables like 'user%'; 

de salida:

mysql> show tables like 'user%'; 

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

| Tables_in_test (user%) | 

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

| user      | 

| user_password    | 

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

2 rows in set (0.00 sec) 
+3

Esto le brinda información (meta) sobre las tablas, no sobre el contenido de la tabla, como lo pretendía el PO. – physicalattraction

3

No puede poner declaraciones SHOW dentro de una subconsulta como en su ejemplo. La única declaración que puede ir en una subconsulta es SELECT.

Como han indicado otras respuestas, puede consultar INFORMATION_SCHEMA directamente con SELECT y obtener mucha más flexibilidad de esa manera.

Las declaraciones SHOW de MySQL son solo consultas internas contra las tablas INFORMATION_SCHEMA.

@physicalattraction usuario ha publicado este comentario en la mayoría de otras respuestas:

Esto le da (meta) información sobre las tablas, no el contenido de la tabla, ya que la intención OP. - physicalattraction

Por el contrario, la pregunta de la OP hace no dicen que quieren para seleccionar los datos en todas las mesas. Dicen que quieren seleccionar el resultado de SHOW TABLES, que es solo una lista de nombres de tablas.

Si el OP desea seleccionar todos los datos de todas las tablas, entonces la respuesta es no, no puede hacerlo con una consulta. Cada consulta debe nombrar sus tablas de forma explícita. No puede hacer que un nombre de tabla sea una variable o el resultado de otra parte de la misma consulta. Además, todas las filas de un resultado de consulta dado deben tener las mismas columnas.

Así que la única forma de seleccionar todos los datos de todas las tablas sería ejecutar SHOW TABLES y luego, para cada tabla nombrada en ese resultado, ejecutar otra consulta.

3

Usted puede estar más cerca de lo que cree — VER tablas ya se comporta muy parecido a 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"; 
} 
8

Para contar:

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

a la lista:

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

¡Bienvenido a StackOverflow! Aquí, usamos el inglés como nuestro idioma principal. Por favor, asegúrese de que sus publicaciones estén en inglés. –

1

Puede crea un procedimiento almacenado y coloca los nombres de la tabla en un cursor, luego recorre los nombres de la tabla para mostrar los datos.

Introducción a procedimiento almacenado: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

Creación de un cursor: http://www.mysqltutorial.org/mysql-cursor/

Por ejemplo,

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 

luego llamar al procedimiento almacenado:

CALL ShowFromTables(); 
Cuestiones relacionadas