Computer >> Máy Tính >  >> Lập trình >> MySQL

Tạo một thủ tục được lưu trữ MySQL, lấy tên của cơ sở dữ liệu làm tham số của nó, để liệt kê các bảng với thông tin chi tiết trong một cơ sở dữ liệu cụ thể.


Giả sử hiện tại chúng tôi đang sử dụng cơ sở dữ liệu có tên là 'query' và nó có các bảng sau -

mysql> Show tables in query;
+-----------------+
| Tables_in_query |
+-----------------+
| student_detail  |
| student_info    |
+-----------------+
2 rows in set (0.00 sec)

Bây giờ, sau đây là một thủ tục được lưu trữ, sẽ chấp nhận tên của cơ sở dữ liệu làm tham số của nó và cung cấp cho chúng ta danh sách các bảng với thông tin chi tiết -

mysql> DELIMITER//
mysql> CREATE procedure tb_list(db_name varchar(40))
   -> BEGIN
   -> SET @z := CONCAT('Select * from information_schema.tables WHERE table_schema = ','\'',db_name,'\'');
   -> Prepare stmt from @z;
   -> EXECUTE stmt;
   -> END //
Query OK, 0 rows affected (0.06 sec)

Bây giờ gọi thủ tục được lưu trữ này bằng cách cung cấp tên của cơ sở dữ liệu làm tham số của nó -

mysql> DELIMITER;
mysql> CALL tb_list('query')\G
*************************** 1. row ***************************
        TABLE_CATALOG: def
         TABLE_SCHEMA: query
           TABLE_NAME: student_detail
           TABLE_TYPE: BASE TABLE
               ENGINE: InnoDB
              VERSION: 10
           ROW_FORMAT: Dynamic
           TABLE_ROWS: 4
       AVG_ROW_LENGTH: 4096
          DATA_LENGTH: 16384
      MAX_DATA_LENGTH: 0
         INDEX_LENGTH: 0
            DATA_FREE: 0
       AUTO_INCREMENT: NULL
          CREATE_TIME: 2017-12-13 16:25:44
          UPDATE_TIME: NULL
           CHECK_TIME: NULL
      TABLE_COLLATION: latin1_swedish_ci
             CHECKSUM: NULL
       CREATE_OPTIONS:
        TABLE_COMMENT:
*************************** 2. row ***************************
        TABLE_CATALOG: def
         TABLE_SCHEMA: query
           TABLE_NAME: student_info
           TABLE_TYPE: BASE TABLE
               ENGINE: InnoDB
              VERSION: 10
           ROW_FORMAT: Dynamic
           TABLE_ROWS: 4
       AVG_ROW_LENGTH: 4096
          DATA_LENGTH: 16384
      MAX_DATA_LENGTH: 0
         INDEX_LENGTH: 0
            DATA_FREE: 0
       AUTO_INCREMENT: NULL
          CREATE_TIME: 2017-12-12 09:52:51
          UPDATE_TIME: NULL
           CHECK_TIME: NULL
      TABLE_COLLATION: latin1_swedish_ci
             CHECKSUM: NULL
       CREATE_OPTIONS:
        TABLE_COMMENT:
2 rows in set (0.00 sec)