it-swarm-ru.tech

Выберите данные из запроса «Показать таблицы» MySQL

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

SELECT * FROM (SHOW TABLES) AS `my_tables`

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

51
BioTronic

Я думаю, что вы хотите SELECT * FROM INFORMATION_SCHEMA.TABLES

Смотрите http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

40
Andrew

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

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

SHOW tables like '%s%'
20
Lucas Oman

Считать:

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;
11
Ivan Ferrer

Вы смотрели в запрос 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;
4
BigJim

Вы не можете поместить операторы SHOW в подзапрос, как в вашем примере. Единственный оператор, который может входить в подзапрос - это SELECT.

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

Операторы MySQL SHOW - это просто запросы к таблицам INFORMATION_SCHEMA.

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

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

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

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

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

4
Bill Karwin

Вы можете быть ближе, чем вы думаете - 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";
}
3
Bob Stein
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

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

3
Brian

Я думаю, что вы хотите, чтобы MySQL представили информацию (s): http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3
Matt Rogish
SELECT * FROM INFORMATION_SCHEMA.TABLES

Это должно быть хорошим началом. Для получения дополнительной информации проверьте таблицы INFORMATION_SCHEMA .

3
Sören Kuklau

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

Да, 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_%';
2
Srdjan

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

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

Я не понимаю, почему вы хотите использовать SELECT * FROM как часть заявления.

12.5.5.30. Синтаксис ШОУ ТАБЛИЦ

1
Derek B. Bell