Tabelnamen ophalen met SELECT-instructie in MySQL

In MySQL weet ik dat ik de tabellen in een database kan weergeven met:

SHOW TABLES

Ik wil deze tabelnamen echter in een andere tabel invoegen, bijvoorbeeld:

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

Is er een manier om de tabelnamen te krijgen met behulp van een standaard SELECT-instructie, zoiets als:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */

Antwoord 1, autoriteit 100%

Om de naam van alle tabellen te krijgen, gebruik:

SELECT table_name FROM information_schema.tables;

Om de naam van de tabellen uit een specifieke database te halen, gebruik:

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';

Gebruik nu deze vraag om de oorspronkelijke vraag te beantwoorden:

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';

Zie voor meer details: http://dev.mysql .com/doc/refman/5.0/en/information-schema.html


Antwoord 2, autoriteit 33%

Probeer:

select * from information_schema.tables

Zie: http://dev.mysql.com/ doc/refman/5.0/en/information-schema.html


Antwoord 3, autoriteit 5%

Als we meerdere databases hebben en we moeten alle tabellen voor een bepaalde database selecteren, kunnen we TABLE_SCHEMAgebruiken om de databasenaam te definiëren als:

select table_name from information_schema.tables where TABLE_SCHEMA='dbname';


Antwoord 4, autoriteit 2%

Naast het gebruik van de INFORMATION_SCHEMA tabel, zou u, om SHOW TABLES te gebruiken om in een tabel in te voegen, het volgende gebruiken

<?php
 $sql = "SHOW TABLES FROM $dbname";
 $result = mysql_query($sql);
 $arrayCount = 0
 while ($row = mysql_fetch_row($result)) {
  $tableNames[$arrayCount] = $row[0];
  $arrayCount++; //only do this to make sure it starts at index 0
 }
 foreach ($tableNames as &$name {
  $query = "INSERT INTO metadata (table_name) VALUES ('".$name."')";
  mysql_query($query);
 }
?>

Antwoord 5, autoriteit 2%

Bekijk de tabel TABLESin de database information_schema. Het bevat informatie over de tabellen in uw andere databases. Maar als je gedeelde hosting gebruikt, heb je er waarschijnlijk geen toegang toe.


Antwoord 6

Ik denk dat u de gewenste gegevens uit INFORMATION_SCHEMA TABLES kunt halen.

Je kunt hier meer informatie vinden: http://dev .mysql.com/doc/refman/5.0/en/tables-table.html


Antwoord 7

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'

Antwoord 8

MySQL INFORMATION_SCHEMA.TABLEStabel bevat gegevens over beide tabellen (geen tijdelijke maar permanente) en views. De kolom TABLE_TYPEdefinieert of dit record voor tabel of weergave is (voor tabellen TABLE_TYPE='BASE TABLE'en voor weergaven TABLE_TYPE='VIEW'). Dus als je alleen je schema (database) tabellen wilt zien, is er de volgende vraag:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'

Antwoord 9

Ik denk dat het nuttig kan zijn om erop te wijzen dat als je tabellen wilt selecteren die specifieke woorden bevatten, je dit eenvoudig kunt doen met de SELECT(in plaats van SHOW) . Onderstaande zoekopdracht beperkt de zoekopdracht eenvoudig tot tabellen die “trefwoord” bevatten

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"

Antwoord 10

Er is nog een andere, eenvoudigere manier om tafelnamen te krijgen

SHOW TABLES FROM <database_name>

Antwoord 11

Deze onderstaande zoekopdracht werkte voor mij. Dit kan het aantal databases, tabellen, kolomnamen, gegevenstypen en kolommen weergeven.

**select table_schema Schema_Name ,table_name TableName,column_name ColumnName,ordinal_position "Position",column_type DataType,COUNT(1) ColumnCount
FROM information_schema.columns
GROUP by table_schema,table_name,column_name,ordinal_position, column_type;**

Antwoord 12

Voor het ophalen van de naam van alle tabellen:

SELECT table_name 
FROM information_schema.tables;

Als u het voor een specifieke database moet ophalen:

SELECT table_name 
FROM information_schema.tables
WHERE table_schema = 'your_db_name';

Uitvoer:

+--------------------+
| table_name         |
+--------------------+
| myapp              |
| demodb             |
| cliquein           |
+--------------------+
3 rows in set (0.00 sec)

Antwoord 13

Als u wilt invoegen, bijwerken en verwijderen, doet u het volgende:

$teste = array('LOW_PRIORITY', 'DELAYED', 'HIGH_PRIORITY', 'IGNORE', 'INTO', 'INSERT', 'UPDATE', 'DELETE', 'QUICK', 'FROM');
$teste1 = array("\t", "\n", "\r", "\0", "\x0B");
$strsql = trim(str_ireplace($teste1, ' ', str_ireplace($teste, '', $strsql)));
$nomeTabela = substr($strsql, 0, strpos($strsql, ' '));
print($nomeTabela);
exit;

Other episodes