MySQL - 顯示列



MySQL Show Columns 語句

要檢索表的全部資訊,我們使用 DESCRIBE、DESC 或 SHOW COLUMNS 語句。

所有這些 MySQL 語句都可以用來檢索/顯示錶所有列的描述,因為它們都檢索相同的結果集。

獲取列資訊在多種情況下都很有用,例如將值插入表中(基於列資料型別)、更新或刪除列,或者只是簡單地瞭解表的結構。

在本章中,讓我們詳細瞭解如何使用 SHOW COLUMNS 語句。

語法

以下是 MySQL SHOW COLUMNS 語句的語法:

SHOW [EXTENDED] [FULL] {COLUMNS | FIELDS}
   {FROM | IN} tbl_name
   [{FROM | IN} db_name]
   [LIKE 'pattern' | WHERE expr]

示例

讓我們從使用以下查詢建立一個名為 TUTORIALS 的資料庫開始:

CREATE DATABASE TUTORIALS;

執行以下語句切換到 TUTORIALS 資料庫:

USE TUTORIALS;

在以下查詢中,我們使用以下 CREATE TABLE 語句建立一個名為 CUSTOMERS 的表:

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

現在,我們使用 **SHOW COLUMNS** 語句檢索有關 CUSTOMERS 表列的資訊:

SHOW COLUMNS FROM CUSTOMERS;

輸出

以下是 CUSTOMERS 表中列的資訊:

欄位 型別 預設值 額外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

示例

我們也可以使用 **IN 子句** 代替 FROM,如下面的查詢所示:

SHOW COLUMNS IN CUSTOMERS;

輸出

正如我們觀察到的輸出,它與之前的輸出完全相同。

欄位 型別 預設值 額外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

示例

我們可以指定 **資料庫名稱** 以及表名,如下面的查詢所示:

SHOW COLUMNS IN CUSTOMERS FROM TUTORIALS;

輸出

以下是 TUTORIALS 資料庫中 CUSTOMERS 表中列的資訊。

欄位 型別 預設值 額外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

示例

我們可以用 **FIELDS** 替換 **COLUMNS** 子句並獲得相同的結果:

SHOW FIELDS IN CUSTOMERS;

輸出

正如我們看到的輸出,我們得到了與 COLUMNS 子句相同的結果。

欄位 型別 預設值 額外
ID int PRI NULL auto_increment
NAME varchar(20) NULL
AGE int NULL
ADDRESS char(25) NULL
SALARY decimal(18,2) NULL

LIKE 子句

在 MySQL 中,使用 LIKE 子句,您可以指定模式來檢索有關特定列的資訊。

示例

以下查詢從 CUSTOMERS 表中檢索以字母“P”開頭的列名。

SHOW COLUMNS FROM CUSTOMERS LIKE 'N%';

輸出

執行上面的查詢將產生以下輸出:

欄位 型別 預設值 額外
NAME varchar(20) NULL

WHERE 子句

我們可以使用 SHOW COLUMNS 語句的 MySQL WHERE 子句來檢索與指定條件匹配的列資訊。

示例

在以下示例中,我們使用 WHERE 子句檢索型別為 **int** 的列。

SHOW COLUMNS FROM CUSTOMERS WHERE Type= 'int';

輸出

執行上面的查詢將產生以下輸出:

欄位 型別 預設值 額外
ID int PRI NULL auto_increment
AGE int NULL

FULL 子句

通常,SHOW COLUMNS 語句提供的資訊包含欄位型別、是否可以為空、鍵、預設值和一些額外詳細資訊。如果使用 full 子句,則會新增諸如排序規則、許可權和註釋之類的詳細資訊。

示例

在以下示例中,我們使用帶有 SHOW COLUMNS 的 FULL 子句來檢索 CUSTOMERS 表的額外詳細資訊:

SHOW FULL COLUMNS IN CUSTOMERS FROM tutorials;

執行上面的查詢將產生以下輸出:

欄位 型別 排序規則 預設值
ID int NULL PRI NULL
NAME varchar(20) utf8mb4 0900 ai ci NULL
AGE int NULL NULL
ADDRESS char(25) utf8mb4 0900 ai ci NULL
SALARY decimal(18,2) NULL NULL

使用客戶端程式顯示錶的列

除了使用 MySQL 查詢在 MySQL 資料庫中顯示錶的列之外,我們還可以使用客戶端程式執行 SHOW COLUMNS 操作。

語法

以下是使用各種程式語言顯示 MySQL 表列的語法:

要透過 PHP 程式顯示 MySQL 表的列,我們需要使用 **mysqli** 函式 **query()** 執行 **Show Columns** 語句,如下所示:

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

要透過 Node.js 程式顯示 MySQL 表的列,我們需要使用 **mysql2** 庫的 **query()** 函式執行 **Show** 語句,如下所示:

sql="SHOW COLUMNS FROM table_name";
con.query(sql);

要透過 Java 程式顯示 MySQL 表的列,我們需要使用 **JDBC** 函式 **executeUpdate()** 執行 **Show** 語句,如下所示:

String sql="SHOW COLUMNS FROM table_name FROM database";
statement.executeQuery(sql);

要透過 Python 程式顯示 MySQL 表的列,我們需要使用 MySQL **Connector/Python** 的 **execute()** 函式執行 **Show** 語句,如下所示:

sql="SHOW COLUMNS FROM table_name FROM database";
cursorObj.execute(sql);

示例

以下是程式:

$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.
'); //column can be shown by the following queries // $sql = "SHOW COLUMNS FROM tut_tbl"; $sql = "SHOW COLUMNS FROM sales FROM tutorials"; if ($show_clmn = $mysqli->query($sql)) { printf("show column executed successfully!.
"); while ($col = mysqli_fetch_array($show_clmn)) { echo "\n{$col['Field']}"; } } if ($mysqli->errno) { printf("Columns could be shown by the above query!.
", $mysqli->error); } $mysqli->close();

輸出

獲得的輸出如下所示:

show column executed successfully!.
ID
ProductName
CustomerName
DispatchDate
DeliveryTime
Price
Location
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 = "CREATE DATABASE demo"
  con.query(sql);

  sql = "USE demo"
  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);

  //Displaying all the columns from the Sales table
  sql = "SHOW COLUMNS FROM sales;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log(result);
  });
});

輸出

產生的輸出如下所示:

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 ShowColumn {
    public static void main(String[] args) {
        String url = "jdbc:mysql://: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...!");

            //show column
            String sql = "SHOW COLUMNS FROM tutorials_tbl FROM TUTORIALS";
            ResultSet resultSet = statement.executeQuery(sql);
            System.out.println("Column has been shown successfully...!");
            while (resultSet.next()) {
                System.out.print(resultSet.getString(1));
                System.out.println();
            }
            connection.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

輸出

獲得的輸出如下所示:

Connected successfully...!
Column has been shown successfully...!
ID
tutorial_title
tutorial_author
import mysql.connector
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
table_name = 'NOVELS'
#Creating a cursor object 
cursorObj = connection.cursor()
show_columns_query = f"SHOW COLUMNS FROM {table_name}"
cursorObj.execute(show_columns_query)
columns_info = cursorObj.fetchall()
print(f"Columns 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]}")
cursorObj.close()
connection.close()

輸出

以下是上述程式碼的輸出:

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