Выберите данные из "show tables" MySQL query

Можно ли выбрать из show tables в MySQL?

SELECT * FROM (SHOW TABLES) AS `my_tables`

Что-то в этих строках, хотя выше не работает (по крайней мере 5.0.51a).

Ответ 2

Не знаю, о чем я знаю, если вы не выберите из INFORMATION_SCHEMA, как упомянули другие.

Однако команда SHOW довольно гибкая, Например:.

SHOW tables like '%s%'

Ответ 3

Считать:

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;

Ответ 4

Вы заглянули в запрос 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;

Ответ 6

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

Это вернет комментарий: myTable.myColumnName

Ответ 7

Вы не можете поместить выражения SHOW внутри подзапроса, как в вашем примере. Единственным утверждением, которое может быть в подзапросе, является SELECT.

Как указывалось в других ответах, вы можете напрямую запросить информацию INFORMATION_SCHEMA с помощью SELECT и получить гораздо больше гибкости.

Операторы MySQL SHOW представляют собой внутренние запросы к таблицам INFORMATION_SCHEMA.

Пользователь @physicalattraction опубликовал этот комментарий к большинству других ответов:

Это дает вам (мета) информацию о таблицах, а не о содержимом таблицы, как это предполагал ОП. - физическая аттракция

Напротив, вопрос OP не говорит, что они хотят выбирать данные во всех таблицах. Говорят, что они хотят выбрать из результата SHOW TABLES, который является всего лишь списком имен таблиц.

Если OP хочет выбрать все данные из всех таблиц, тогда ответ будет отрицательным, вы не можете сделать это с одним запросом. Каждый запрос должен явно указывать свои таблицы. Вы не можете сделать имя таблицы переменной или результатом другой части того же запроса. Кроме того, все строки заданного результата запроса должны иметь одинаковые столбцы.

Таким образом, единственный способ выбрать все данные из всех таблиц - запустить SHOW TABLES, а затем для каждой таблицы, названной в этом результате, запустить другой запрос.

Ответ 8

Вы можете быть ближе, чем вы думаете. 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";
}

Ответ 9

SELECT * FROM INFORMATION_SCHEMA.TABLES

Это должно быть хорошим началом. Подробнее см. Таблицы INFORMATION_SCHEMA.

Ответ 11

Да, SELECT из table_schema может быть очень полезным для системного администрирования. Если у вас много серверов, баз данных, таблиц... иногда вам нужно DROP или UPDATE группировать элементы. Например, чтобы создать запрос для DROP всех таблиц с именем префикса "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_%';

Ответ 12

в 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)

Ответ 13

Вы можете создать хранимую процедуру и поместить имена таблиц в курсор, а затем пронумеровать имена таблиц, чтобы показать данные.

Начало работы с хранимой процедурой: 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();