MySQL - SHOW COLUMNS 语句
MySQL 显示列语句
要检索表的完整信息,我们使用 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 表中的列信息 -
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 |
示例
我们也可以使用 IN 子句 代替 FROM,如以下查询所示 -
SHOW COLUMNS IN CUSTOMERS;
输出
我们可以观察到输出,它与之前的输出完全相同。
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 |
示例
我们可以指定数据库名称以及表名称,如以下查询所示 -
SHOW COLUMNS IN CUSTOMERS FROM TUTORIALS;
输出
以下是 TUTORIALS 数据库中 CUSTOMERS 表中的列信息。
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 |
示例
我们可以将 COLUMNS 子句替换为 FIELDS 子句,并获得相同的结果 -
SHOW FIELDS IN CUSTOMERS;
输出
如输出所示,我们得到了与 COLUMNS 子句相同的结果。
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 |
LIKE 子句
在 MySQL 中,使用 LIKE 子句可以指定一个模式来检索特定列的信息。
示例
以下查询从 CUSTOMERS 表中检索以字母 "P" 开头的列名。
SHOW COLUMNS FROM CUSTOMERS LIKE 'N%';
输出
执行上述查询将产生以下输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
NAME | varchar(20) | NO | NULL |
WHERE 子句
我们可以使用 SHOW COLUMNS 语句的 MySQL WHERE 子句来检索符合指定条件的列的信息。
示例
在下面的示例中,我们使用 WHERE 子句检索类型为 int 的列。
SHOW COLUMNS FROM CUSTOMERS WHERE Type= 'int';
输出
执行上述查询将产生以下输出 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | PRI | NULL | auto_increment |
AGE | int | NO | NULL |
FULL 子句
通常,SHOW COLUMNS 语句提供的信息包含字段类型(可以为空或不为空)、键、默认值以及一些额外信息。如果使用完整子句,则会添加排序规则、权限和注释等详细信息。
示例
在以下示例中,我们将 FULL 子句与 SHOW COLUMNS 语句结合使用,以检索 CUSTOMERS 表的额外信息 -
SHOW FULL COLUMNS IN CUSTOMERS FROM tutorials;
执行上述查询将产生以下输出 -
Field | Type | Collation | Null | Key | Default |
---|---|---|---|---|---|
ID | int | NULL | NO | PRI | NULL |
NAME | varchar(20) | utf8mb4 0900 ai ci | NO | NULL | |
AGE | int | NULL | NO | NULL | |
ADDRESS | char(25) | utf8mb4 0900 ai ci | YES | NULL | |
SALARY | decimal(18,2) | NULL | YES | NULL |
使用客户端程序显示表的列
除了使用 MySQL 查询显示 MySQL 数据库中表的列之外,我们还可以使用客户端程序执行"显示列"操作。
语法
以下是使用各种编程语言显示 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 " {$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" }); //连接到 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://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...!"); //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 #建立连接 connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) table_name = 'NOVELS' #创建游标对象 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