MySQL - DESCRIBE Tables



Describing a MySQL table refers to retrieving its definition or structure. When we describe a table, it basically includes the fields present, their datatypes, and if any constraints defined on them.

We can get the information about the table structure using the following SQL statements −

  • DESCRIBE Statement

  • DESC Statement

  • SHOW COLUMNS Statement

  • EXPLAIN Statement

All these statements are used for the same purpose. Let us learn about them in detail, one by one, in this tutorial.

DESCRIBE Statement

The MySQL DESCRIBE statement is used to retrieve a table-related information, which consists of field names, field data types, and constraints (if any). This statement is a shortcut for the SHOW columns statement (they both retrieve the same information from a table).

Apart from retrieving a table's definition, this statement can be used to get the information of a particular field in a table.

Syntax

Following is the syntax of MySQL DESCRIBE statement −

DESCRIBE table_name [col_name | wild];

Example

In the following example, we are creating a table named CUSTOMERS using the CREATE TABLE statement −

CREATE TABLE CUSTOMERS (
   ID INT AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

Now, execute the following query to get the information about columns of the CUSTOMERS table −

DESCRIBE CUSTOMERS;

Output

Following is the columns information of CUSTOMERS table −

Field Type Null Key Default Extra
ID int NO PRI NULL auto_increment
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18, 2) YES NULL

Describing a specific column

By default, the DESCRIBE statement provides information about all the columns in the specified table. But you can also retrieve information about a particular column of a table by specifying the name of that column.

For example, the following query displays information about NAME column of CUSTOMERS table, which we created in the previous example.

DESCRIBE CUSTOMERS NAME;

Output

Following is the description of NAME column in CUSTOMERS table −

Field Type Null Key Default Extra
NAME varchar(20) NO NULL

DESC Statement

We can also retrieve the table information using the MySQL DESC statement instead of DESCRIBE. They both give the same results, so DESC is just a shortcut for DESCRIBE statement.

Syntax

Following is the syntax of the MySQL DESC statement −

DESC table_name [col_name | wild];

Example

In this example, we are trying to get the information of CUSTOMERS table using DESC statement.

DESC CUSTOMERS;

Following is the columns information of CUSTOMERS table −

Field Type Null Key Default Extra
ID int NO PRI NULL auto_increment
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18,2) YES NULL

Describing a specific column

We can also get the information of a specific column in a given table, similar to using DESCRIBE. Instead of DESCRIBE, we use DESC.

For example, the following query displays information about NAME column of CUSTOMERS table.

DESC CUSTOMERS NAME;

Output

Following is the description of NAME column in CUSTOMERS table −

Field Type Null Key Default Extra
NAME varchar(20) NO NULL

SHOW COLUMNS Statement

The MySQL SHOW COLUMNS Statement is used to display the information of all the columns present in a table. The DESCRIBE statement is a shortcut for this statement.

Note: This statement will not display information of a specific field.

Syntax

Following is the syntax of the SHOW COLUMNS statement −

SHOW COLUMNS FROM table_name;

Example

Here, we are retrieving column information of the same CUSTOMERS table using the SHOW COLUMNS statement.

SHOW COLUMNS FROM CUSTOMERS;

Following is the columns information of CUSTOMERS table −

Field Type Null Key Default Extra
ID int NO PRI NULL auto_increment
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18,2) YES NULL

EXPLAIN Statement

The MySQL EXPLAIN Statement is a synonym of DESCRIBE Statement which retrieves the information of a table's structure such as column names, column data types, and constraints (if any).

Syntax

Following is the syntax of the SHOW COLUMNS statement −

EXPLAIN table_name;

Example

In the following query, we are retrieving column information of the CUSTOMERS table using the EXPLAIN statement.

EXPLAIN CUSTOMERS;

Following is the columns information of CUSTOMERS table −

Field Type Null Key Default Extra
ID int NO PRI NULL auto_increment
NAME varchar(20) NO NULL
AGE int NO NULL
ADDRESS char(25) YES NULL
SALARY decimal(18,2) YES NULL

Describe Tables in Different Formats

You can retrieve the information in various formats using the explain_type option. The value to this option can be TRADITIONAL, JSON and, TREE.

Syntax

Following is the syntax to describe tables in different formats −

{EXPLAIN | DESCRIBE | DESC} 
explain_type: { FORMAT = format_name } select_statement

Example

In the following example, we are describing the CUSTOMERS table format as TRADITIONAL.

EXPLAIN FORMAT = TRADITIONAL SELECT * FROM CUSTOMERS;

Output

Executing the query above will produce the following output −

id select_type table partitions possible_keys
1 SIMPLE CUSTOMERS NULL NULL

Example

Here, we are describing the CUSTOMERS table format as JSON.

EXPLAIN FORMAT = JSON SELECT * FROM CUSTOMERS;

Output

Executing the query above will produce the following output −

EXPLAIN
{ "query_block": { "select_id": 1, "cost_info": { "query_cost": "0.95" }, "table": { "table_name": "CUSTOMERS", "access_type": "ALL", "rows_examined_per_scan": 7, "rows_produced_per_join": 7, "filtered": "100.00", "cost_info": { "read_cost": "0.25", "eval_cost": "0.70", "prefix_cost": "0.95", "data_read_per_join": "1K" }, "used_columns": [ "ID", "NAME", "AGE", "ADDRESS", "SALARY" ] } } }

Example

In the following example, we are describing the CUSTOMERS table format as TREE.

EXPLAIN FORMAT = TREE SELECT * FROM CUSTOMERS;

Output

Executing the query above will produce the following output −

EXPLAIN
Table scan on CUSTOMERS (cost=0.95 rows=7)

Describing Table Using a Client Program

In addition to describe a table from MySQL Database using the MySQL query, we can also perform the DESCRIBE TABLE operation on a table using a client program.

Syntax

Following are the syntaxes to describe a table from MySQL Database in various programming languages −

To describe a table from MySQL Database through a PHP program, we need to execute the Describe Table statement using the mysqli function query() as −

$sql="Describe Table_name";
$mysqli->query($sql);

To describe a table from MySQL Database through a Node.js program, we need to execute the Describe Table statement using the query() function of the mysql2 library as −

sql="Describe Table_name";
con.query(sql);

To describe a table from MySQL Database through a Java program, we need to execute the Describe Table statement using the JDBC function executeUpdate() as −

String sql="Describe Table_name";
statement.executeUpdate(sql);

To describe a table from MySQL Database through a Python program, we need to execute the Describe Table statement using the execute() function of the MySQL Connector/Python as −

sql="Describe Table_name";
cursorObj.execute(sql);

Example

Following are the programs −

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); $sql = " DESCRIBE sales "; if ($q = $mysqli->query($sql)) { printf(" Table described successfully.
"); while ($row = mysqli_fetch_array($q)) { echo "{$row['Field']} - {$row['Type']}\n"; } } if ($mysqli->errno) { printf("table could not be described .
", $mysqli->error); } $mysqli->close();

Output

The output obtained is as follows −

Table described successfully.
ID - int
ProductName - varchar(255)
CustomerName - varchar(255)
DispatchDate - date
DeliveryTime - time
Price - int
Location - varchar(255)
var mysql = require('mysql2');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "Nr5a0204@123"
});

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");

  sql = "USE TUTORIALS"
  con.query(sql);

  sql = "CREATE TABLE SALES(ID INT, ProductName VARCHAR(255), CustomerName VARCHAR(255), DispatchDate date, DeliveryTime time, Price INT, Location VARCHAR(255));"
  con.query(sql);

  sql = "DESCRIBE SALES;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log(result);
  });
});

Output

The output produced is as follows −

Connected!
--------------------------
[
  {
    Field: 'ID',
    Type: 'int',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'ProductName',
    Type: 'varchar(255)',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'CustomerName',
    Type: 'varchar(255)',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'DispatchDate',
    Type: 'date',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'DeliveryTime',
    Type: 'time',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'Price',
    Type: 'int',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'Location',
    Type: 'varchar(255)',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  }
]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DescribeTable {
    public static void main(String[] args){
        String url = "jdbc:mysql://localhost:3306/TUTORIALS";
        String username = "root";
        String password = "password";
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, username, password);
            Statement statement = connection.createStatement();
            System.out.println("Connected successfully...!");

            //Describe table details...!
            ResultSet resultSet = statement.executeQuery("DESCRIBE customers");
            System.out.println("Following is the table description");
            while(resultSet.next()) {
                System.out.print(resultSet.getNString(1));
                System.out.println();
            }
            connection.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}

Output

The output obtained is as shown below −

Connected successfully...!
Following is the table description
ID
NAME
AGE
ADDRESS
SALARY
import mysql.connector
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
table_name = 'tutorials_tbl'
#Creating a cursor object 
cursorObj = connection.cursor()
describe_table_query = f"DESCRIBE {table_name}"
cursorObj.execute(describe_table_query)
columns_info = cursorObj.fetchall()
print(f"Description of table '{table_name}':")
for column in columns_info:
    print(f"Column Name: {column[0]}, Type: {column[1]}, Null: {column[2]}, Key: {column[3]}, Default: {column[4]}, Extra: {column[5]}")
cursorObj.close()
connection.close()

Output

Following is the output of the above code −

Description of table 'tutorials_tbl':
Column Name: tutorial_id, Type: b'int', Null: NO, Key: PRI, Default: None, Extra: auto_increment
Column Name: tutorial_title, Type: b'varchar(100)', Null: NO, Key: , Default: None, Extra: 
Column Name: tutorial_author, Type: b'varchar(40)', Null: NO, Key: , Default: None, Extra: 
Column Name: submission_date, Type: b'date', Null: YES, Key: , Default: None, Extra: 
Column Name: tutorial_name, Type: b'varchar(20)', Null: YES, Key: , Default: None, Extra:
Advertisements