MySQL - 显示列
- MySQL SHOW COLUMNS 语句
- LIKE 子句
- WHERE 子句
- FULL 子句
- 使用客户端程序显示表列
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 表中列的信息 −
| 字段 | 类型 | Null | 键 | 默认值 | 额外 |
|---|---|---|---|---|---|
| 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;
输出
正如我们观察到的输出,它与之前的输出完全相同。
| 字段 | 类型 | Null | 键 | 默认值 | 额外 |
|---|---|---|---|---|---|
| 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 表的列信息。
| 字段 | 类型 | Null | 键 | 默认值 | 额外 |
|---|---|---|---|---|---|
| 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 子句相同的结果。
| 字段 | 类型 | Null | 键 | 默认值 | 额外 |
|---|---|---|---|---|---|
| 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 表中检索以字母 "N" 开头的列名。
SHOW COLUMNS FROM CUSTOMERS LIKE 'N%';
输出
执行上述查询将产生以下输出 −
| 字段 | 类型 | Null | 键 | 默认值 | 额外 |
|---|---|---|---|---|---|
| NAME | varchar(20) | NO | NULL |
WHERE 子句
我们可以使用 SHOW COLUMNS 语句的 MySQL WHERE 子句来检索符合指定条件的列信息。
示例
在以下示例中,我们使用 WHERE 子句来检索 Type 为 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 语句提供的信息包含字段类型、是否允许 NULL、主键、默认值以及一些额外细节。如果使用 FULL 子句,将会添加 collation、privileges 和 comments 等详细信息。
示例
在以下示例中,我们使用 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 数据库中表的列之外,我们还可以使用客户端程序来执行 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.
');
//可以通过以下查询显示列
// $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"
});
//连接到 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);
//显示 Sales 表的所有列
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...!");
//显示列
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"表 '{table_name}' 的列:")
for column in columns_info:
print(f"列名: {column[0]}, 类型: {column[1]}, Null: {column[2]}, Key: {column[3]}, 默认值: {column[4]}")
cursorObj.close()
connection.close()
输出
上述代码的输出如下所示 −
表 'tutorials_tbl' 的列: 列名: tutorial_id, 类型: b'int', Null: NO, Key: PRI, 默认值: None 列名: tutorial_title, 类型: b'varchar(100)', Null: NO, Key: , 默认值: None 列名: tutorial_author, 类型: b'varchar(40)', Null: NO, Key: , 默认值: None 列名: submission_date, 类型: b'date', Null: YES, Key:, 默认值: None 列名: tutorial_name, 类型: b'varchar(20)', Null: YES, Key: , 默认值: None