在 MySQL 中,我知道我可以列出数据库中的表:
SHOW TABLES
但是,我想将这些表名插入到另一个表中,例如:
INSERT INTO metadata(table_name) SHOW TABLES /* does not work */
有没有办法使用标准 SELECT 语句获取表名,例如:
INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
要获取所有表的名称,请使用:
SELECT table_name FROM information_schema.tables;
要从特定数据库中获取表的名称,请使用:
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';
现在,要回答原始问题,请使用以下查询:
INSERT INTO table_name
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';
有关详细信息,请参阅:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
尝试:
select * from information_schema.tables
请参阅:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
如果我们有多个数据库并且我们需要为特定数据库选择所有表,我们可以使用 TABLE_SCHEMA
将数据库名称定义为:
select table_name from information_schema.tables where TABLE_SCHEMA='dbname';
除了使用 INFORMATION_SCHEMA 表之外,要使用 SHOW TABLES 插入表中,您将使用以下
<?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);
}
?>
查看数据库 information_schema
中的表 TABLES
。它包含有关其他数据库中表的信息。但是,如果您使用的是共享主机,您可能无法访问它。
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'DATABASE'
MySQL INFORMATION_SCHEMA.TABLES
表包含有关表(不是临时的而是永久的)和视图的数据。列 TABLE_TYPE
定义这是表还是视图的记录(表 TABLE_TYPE='BASE TABLE'
和视图 TABLE_TYPE='VIEW'
)。因此,如果您只想从架构(数据库)表中查看,则可以使用以下查询:
SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'
我认为您可以从 INFORMATION_SCHEMA TABLES 中获取您想要的数据。
您可以在此处找到更多信息:http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
获取所有表的名称:
SELECT table_name
FROM information_schema.tables;
如果您需要为特定数据库获取它:
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'your_db_name';
输出:
+--------------------+
| table_name |
+--------------------+
| myapp |
| demodb |
| cliquein |
+--------------------+
3 rows in set (0.00 sec)
还有另一种更简单的方法来获取表名
SHOW TABLES FROM <database_name>
我认为指出如果您想选择包含特定单词的表格可能会有所帮助,您可以使用 SELECT
(而不是 SHOW
)轻松完成。下面的查询很容易将搜索范围缩小到包含“关键字”的表
SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
下面的查询对我有用。这可以显示数据库、表、列名、数据类型和列数。
**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;**
是的,使用 information_schema.TABLES。这甚至适用于如下所示的 Skyvia 之类的云解决方案:
https://i.stack.imgur.com/q35fw.png
有了这个,您可以简单地使用上面的 SELECT 语句将其添加到您的 INSERT 语句中。但是更改 table_schema 值以匹配您实际设置的数据库名称。
要插入、更新和删除,请执行以下操作:
$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;
sqlite_master