Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:Tóm tắt tất cả số hàng của bảng trong một truy vấn duy nhất

Mã ví dụ đầu tiên ở đây là một thủ tục được lưu trữ thực hiện toàn bộ quá trình trong một bước, cho đến khi người dùng có liên quan.

BEGIN

# zgwp_tables_rowcounts
# TableName RowCount
# Outputs a result set listing all tables and their row counts 
# for the current database

SET SESSION group_concat_max_len = 1000000;

SET @sql = NULL;
SET @dbname = DATABASE();

SELECT
  GROUP_CONCAT( 
    CONCAT (
      'SELECT ''',table_name,''' as TableName, COUNT(*) as RowCount FROM ', 
       table_name, ' '
    ) 
    SEPARATOR 'UNION '  
  ) AS Qry
FROM
  information_schema.`TABLES` AS t
WHERE
  t.TABLE_SCHEMA = @dbname AND
  t.TABLE_TYPE = "BASE TABLE"
ORDER BY
  t.TABLE_NAME ASC

INTO @sql
;

PREPARE stmt FROM @sql;

EXECUTE stmt;

END

Ghi chú:

  • SELECT..INTO @sql tạo truy vấn cần thiết và PREPARE ... EXECUTE chạy nó.

  • Đặt biến group_concat_max_len để cho phép một chuỗi kết quả đủ dài từ GROUP_CONCAT.

Quy trình trên rất hữu ích để xem nhanh trong môi trường quản trị như Navicat hoặc trên dòng lệnh. Tuy nhiên, mặc dù trả về một tập hợp kết quả, theo như tôi biết thì nó không thể được tham chiếu trong một Chế độ xem hoặc Truy vấn khác, có lẽ vì MySQL không thể xác định, trước khi chạy nó, bộ kết quả nào mà nó tạo ra, chứ đừng nói đến những cột nào chúng có .

Vì vậy, vẫn hữu ích khi có thể nhanh chóng sản xuất mà không cần chỉnh sửa thủ công, câu lệnh SELECT ... UNION riêng biệt có thể được sử dụng như một Dạng xem. Điều đó rất hữu ích nếu bạn muốn nối số hàng với một số thông tin trên mỗi bảng từ một bảng khác. Dưới đây là một thủ tục được lưu trữ khác:

BEGIN

# zgwp_tables_rowcounts_view_statement
# Output: SelectStatement
# Outputs a single row and column, containing a (possibly lengthy)
# SELECT...UNION statement that, if used as a View, will output
# TableName RowCount for all tables in the current database.

SET SESSION group_concat_max_len = 1000000;
SET @dbname = DATABASE();

SELECT
  GROUP_CONCAT( 
    CONCAT (
      'SELECT ''',table_name,''' as TableName, COUNT(*) as RowCount FROM ', 
      table_name, ' ', CHAR(10)) 
    SEPARATOR 'UNION '  
  ) AS SelectStatement
FROM
  information_schema.`TABLES` AS t
WHERE
  t.TABLE_SCHEMA = @dbname AND
  t.TABLE_TYPE = "BASE TABLE"
ORDER BY
  t.TABLE_NAME ASC
;
END

Ghi chú

  • Rất giống với thủ tục đầu tiên trong khái niệm. Tôi đã thêm dấu ngắt dòng (CHAR (10)) vào mỗi câu lệnh phụ "SELECT ... UNION", để thuận tiện cho việc xem hoặc chỉnh sửa câu lệnh.

  • Bạn có thể tạo điều này dưới dạng một hàm và trả về Câu lệnh Chọn, nếu điều đó thuận tiện hơn cho môi trường của bạn.

Hy vọng điều đó sẽ hữu ích.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi ngủ đông trong các truy vấn được đặt tên

  2. Vòng lặp qua kết quả SQL trong PHP - Không nhận được toàn bộ mảng

  3. MySQL COUNT () nhiều cột

  4. Làm tròn ngày giờ MYSQL thành khoảng thời gian sớm nhất 15 phút tính bằng mili giây (PHP)

  5. Bộ nhớ đệm truy vấn MySQL:giới hạn ở kích thước bộ nhớ cache tối đa là 128 MB?