Nhận tên bảng bằng cách sử dụng câu lệnh SELECT trong MySQL


260

Trong MySQL, tôi biết tôi có thể liệt kê các bảng trong cơ sở dữ liệu với:

SHOW TABLES

Tuy nhiên, tôi muốn chèn các tên bảng này vào một bảng khác, ví dụ:

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

Có cách nào để lấy tên bảng bằng cách sử dụng câu lệnh CHỌN tiêu chuẩn không, đại loại như:

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

bản sao có thể có của stackoverflow.com/questions/64894/
Mạnh

Câu trả lời:


381

Để có được tên của tất cả các bảng, hãy sử dụng:

SELECT table_name FROM information_schema.tables;

Để lấy tên của các bảng từ cơ sở dữ liệu cụ thể, hãy sử dụng:

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

Bây giờ, để trả lời câu hỏi ban đầu, hãy sử dụng truy vấn này:

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

Để biết thêm chi tiết, hãy xem: http://dev.mysql.com/doc/refman/5.0/en/inif-schema.html


144

Thử:

select * from information_schema.tables

Xem: http://dev.mysql.com/doc/refman/5.0/en/inif-schema.html


4
Điều này chỉ đúng hướng, nhưng không thực sự trả lời câu hỏi. Có thể giải thích nhiều hơn.
Murilo Garcia

@MuriloGarcia information_schema là một phần của tiêu chuẩn SQL. Postgres có nó là tốt. Đối với SQLite, bạn tìm trongsqlite_master
peterchaula

Tìm nạp các bảng theo tên bằng cách sử dụng THÍCH: CHỌN TABLE_NAME TỪ information_schema.tables WHERE TABLE_NAME THÍCH '% keyword%';
Jarrett Barnett

19

nếu chúng ta có nhiều cơ sở dữ liệu và chúng ta cần chọn tất cả các bảng cho một cơ sở dữ liệu cụ thể, chúng ta có thể sử dụng TABLE_SCHEMAđể xác định tên cơ sở dữ liệu là:

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


12

Bên cạnh việc sử dụng bảng Information_SCHema, để sử dụng BẢNG BIỂN để chèn vào bảng bạn sẽ sử dụng như sau

<?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);
 }
?>

8

Hãy nhìn vào bảng TABLEStrong cơ sở dữ liệu information_schema. Nó chứa thông tin về các bảng trong cơ sở dữ liệu khác của bạn. Nhưng nếu bạn đang sử dụng lưu trữ được chia sẻ, có lẽ bạn không có quyền truy cập vào nó.



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

3
Tôi có thể yêu cầu bạn vui lòng thêm một số bối cảnh xung quanh câu trả lời của bạn. Câu trả lời chỉ có mã là khó hiểu. Nó sẽ giúp người hỏi và người đọc tương lai cả nếu bạn có thể thêm thông tin trong bài viết của mình.
RBT

4

INFORMATION_SCHEMA.TABLESBảng MySQL chứa dữ liệu về cả hai bảng (không phải tạm thời nhưng vĩnh viễn) và các khung nhìn. Cột TABLE_TYPExác định xem đây là bản ghi cho bảng hoặc dạng xem (cho bảng TABLE_TYPE='BASE TABLE'và cho dạng xemTABLE_TYPE='VIEW' ). Vì vậy, nếu bạn muốn xem từ bảng lược đồ (cơ sở dữ liệu) của mình thì chỉ có truy vấn sau:

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

2

Tôi nghĩ có thể hữu ích khi chỉ ra rằng nếu bạn muốn chọn các bảng có chứa các từ cụ thể, bạn có thể dễ dàng thực hiện bằng cách sử dụng SELECT(thay vì SHOW). Truy vấn bên dưới dễ dàng thu hẹp tìm kiếm vào các bảng có chứa "từ khóa"

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

0

Có một cách đơn giản hơn để lấy tên bảng

SHOW TABLES FROM <database_name>

2
Điều này không trả lời câu hỏi nào cả.
Mike Chamberlain

Đã giúp tôi khi tôi tìm kiếm một cái gì đó đạt tiêu đề của câu hỏi.
Shihe Zhang

Không. Điều này không tốt vì nó chỉ hiển thị các bảng trong công cụ mysql.
TS

0

Truy vấn dưới đây làm việc cho tôi. Điều này có thể hiển thị cơ sở dữ liệu, bảng, tên cột, kiểu dữ liệu và số cột.

**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;**

-3

Để chèn, cập nhật và xóa, hãy làm như sau:

$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;

Chúng tôi mong đợi tiếng Anh ở đây. Tuy nhiên, chúng tôi có một trang web bằng tiếng Bồ Đào Nha tại: pt.stackoverflow.com
nguyệt quế
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.