MySQL - SHOW OPEN TABLES Statement



SHOW OPEN TABLES Statement

The CREATE TABLE statement is used to create tables in MYSQL database. Here, you need to specify the name of the table and, definition (name and datatype) of each column.

The SHOW OPEN TABLES statement displays the lists the non-TEMPORARY tables which are currently open in the table cache. In addition to names of the tables this statement also provides the name of the database the table is in and binary values (0 or 1) specifying whether the table is in use and if it is locked.

Syntax

Following is the syntax of the SHOW OPEN TABLES Statement −

SHOW OPEN TABLES
   [{FROM | IN} db_name]
   [LIKE 'pattern' | WHERE expr]

Example

Following statement displays the information about the tables that are currently open in the table cache −

SHOW OPEN TABLES\G;

Output

The above query produces the following output −

************* 1. row *************
   Database: mysql
      Table: check_constraints
     In_use: 0
Name_locked: 0
************* 2. row *************
   Database: mysql
      Table: column_type_elements
     In_use: 0
Name_locked: 0
************* 3. row *************
   Database: mysql
      Table: slave_master_info
     In_use: 0
Name_locked: 0
************* 4. row *************
   Database: mysql
      Table: foreign_keys
     In_use: 0
Name_locked: 0
************* 5. row *************
   Database: mysql
      Table: columns
     In_use: 0
Name_locked: 0
************* 6. row *************
   Database: mysql
      Table: foreign_key_column_usage
     In_use: 0
Name_locked: 0
************* 7. row *************
   Database: mysql
      Table: server_cost
     In_use: 0
Name_locked: 0
************* 8. row *************
   Database: mysql
      Table: index_column_usage
     In_use: 0
Name_locked: 0
************* 9. row *************
   Database: mysql
      Table: view_table_usage
     In_use: 0
Name_locked: 0
************* 10. row *************
   Database: mysql
      Table: index_partitions
     In_use: 0
Name_locked: 0
************* 11. row *************
   Database: mysql
      Table: indexes
     In_use: 0
Name_locked: 0
************* 12. row *************
   Database: mysql
      Table: schemata
     In_use: 0
Name_locked: 0
************* 13. row *************
   Database: mysql
      Table: collations
     In_use: 0
Name_locked: 0
************* 14. row *************
   Database: mysql
      Table: table_partition_values
     In_use: 0
Name_locked: 0
************* 15. row *************
   Database: mysql
      Table: table_partitions
     In_use: 0
Name_locked: 0
************* 16. row *************
   Database: mysql
      Table: tables
     In_use: 0
Name_locked: 0
************* 17. row *************
   Database: mysql
      Table: role_edges
     In_use: 0
Name_locked: 0
************* 18. row *************
   Database: mysql
      Table: triggers
     In_use: 0
Name_locked: 0
************* 19. row *************
   Database: test
      Table: contact
     In_use: 0
Name_locked: 0
************* 20. row *************
   Database: mysql
      Table: column_statistics
     In_use: 0
Name_locked: 0
........................
........................
........................

FROM or IN clause

You can retrieve information about the non-TEMPORARY tables that are currently open in the table cache from a specific database using the FROM clause.

SHOW OPEN TABLES FROM performance_schema;

Output

Following is the output of the above query −

Database Table In_use Name_locked
performance_schema events_waits_history_long 0 0
performance_schema session_status 0 0
performance_schema events_stages_history_long 0 0
performance_schema events_statements_current 0 0
performance_schema session_variables 0 0
performance_schema threads 0 0

You can also use the IN clause instead of FROM as −

SHOW OPEN TABLES IN performance_schema;

Output

After executing the above query, it will produce the following output −

Database Table In_use Name_locked
performance_schema events_waits_history_long 0 0
performance_schema session_status 0 0
performance_schema events_stages_history_long 0 0
performance_schema events_statements_current 0 0
performance_schema session_variables 0 0
performance_schema threads 0 0

The LIKE clause

Using the LIKE clause, you can specify a pattern to retrieve information about specific tables that are currently open in the table cache. Following query retrieves description about the tables with name starting with the word "information".

SHOW OPEN TABLES LIKE 'time%';

Output

Once the query is executed, it will produce the output shown below −

Database Table In_use Name_locked
mysql time_zone_transition 0 0
mysql time_zone_leap_second 0 0
mysql time_zone_name 0 0
mysql time_zone 0 0
mysql time_zone_transition_type 0 0

The WHERE clause

You can use the WHERE clause of the SHOW OPEN TABLES statements to retrieve description of the variables which match the specified condition.

Example

Assume we have created a table that contains the sales details as shown below −

CREATE TABLE SalesDetails (
   ID INT,
   ProductName VARCHAR(255),
   CustomerName VARCHAR(255),
   DispatchDate date,
   DeliveryTime time,
   Price INT,
   Location VARCHAR(255),
);

Now create another table with the contact details of the customer create a table as −

CREATE TABLE CustContactDetails (
   ID INT,
   Name VARCHAR(255),
   Age INT,
   Phone BIGINT,
   Address VARCHAR(255),
   Email VARCHAR(50)
);

Following query displays the Open tables that are current in use −

SHOW OPEN TABLES WHERE In_use=1;

Output

The above query generates the following output −

Database Table In_use Name_locked
demo custcontactdetails 1 0
demo salesdetails 1 0
Advertisements