MySQL - 重命名列
MySQL 中的 ALTER TABLE 语句可用于更改表的结构。例如,我们可以使用此语句添加、删除或重命名列等。
以下是可与 ALTER TABLE 语句一起使用来重命名表列的两个选项:
- 重命名列
- 更改列
注意:重命名表列需要 ALTER 和 DROP 权限。
使用 RENAME COLUMN
在 MySQL 中,我们可以使用 ALTER TABLE RENAME COLUMN 命令更改指定表的一个或多个列的名称。
语法
以下是重命名 MySQL 表中列的语法−
ALTER TABLE table_name RENAME COLUMN old_column1_name TO new_column1_name, RENAME COLUMN old_column2_name TO new_column2_name, ...;
示例
首先,我们使用以下查询创建一个名为 CUSTOMERS 的表 −
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL );
这里,我们使用 DESCRIBE 命令来显示上面创建的表结构的信息 -
DESCRIBE CUSTOMERS;
如下表所示,CUSTOMERS 表中有三列 -
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | int | NO | NULL | ||
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | NULL |
现在,我们使用以下查询将名为ID的列重命名为cust_id -
ALTER TABLE CUSTOMERS RENAME COLUMN ID TO cust_id;
输出
执行上述查询将产生以下输出 -
Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
让我们检索 CUSTOMERS 表的描述,以验证列 ID 是否已重命名为 stud_id -
DESCRIBE CUSTOMERS;
正如我们在输出表中观察到的,ID 列已成功重命名为 stud_id。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
cust_id | int | NO | NULL | ||
NAME | varchar(20) | NO | NULL | ||
AGE | int | NO | NULL |
示例
现在,我们将 CUSTOMERS 表中的另外两列 NAME 和 AGE 重命名为 cust_name 和 cust_age -
ALTER TABLE CUSTOMERS RENAME COLUMN NAME TO cust_name, RENAME COLUMN AGE TO cust_age;
输出
执行上述查询将产生以下输出 -
Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
要验证列名是否已重命名,请执行以下查询 -
DESCRIBE CUSTOMERS;
正如我们在输出表中观察到的,上述列已成功重命名。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
cust_id | int | NO | NULL | ||
cust_name | varchar(20) | NO | NULL | ||
cust_age | int | NO | NULL |
使用 CHANGE COLUMN
在 MySQL 中,我们可以使用 ALTER TABLE ... CHANGE COLUMN 命令更改一个或多个列的名称及其数据类型。
语法
以下是 MySQL 中 ALTER TABLE ... CHANGE 命令的语法 -
ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name 数据类型;
示例
考虑之前更新的 CUSTOMERS 表,让我们更改 cust_id 列的名称和数据类型 -
ALTER TABLE CUSTOMERS CHANGE COLUMN cust_id ID varchar(10);
输出
执行上述查询将产生以下输出 -
Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
使用以下查询,我们可以验证列 cust_id 的名称和数据类型是否已更改 -
DESCRIBE CUSTOMERS;
列名称和数据类型已成功更改。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | varchar(10) | NO | NULL | ||
cust_name | varchar(20) | NO | NULL | ||
cust_age | int | NO | NULL |
示例
此处,我们将更改 CUSTOMERS 表中多个列(cust_name 和 cust_age)的名称和数据类型 -
ALTER TABLE CUSTOMERS CHANGE COLUMN cust_name NAME DECIMAL(18,2), CHANGE COLUMN cust_age AGE VARCHAR(20);
输出
执行上述查询将产生以下输出 -
Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
验证
让我们检索 CUSTOMERS 表的描述,以验证列名和数据类型是否已更改 -
DESCRIBE STUDENTS;
正如我们在输出表中观察到的,上述列的名称和数据类型已成功更改。
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ID | varchar(10) | NO | NULL | ||
NAME | decimal(18,2) | NO | NULL | ||
AGE | varchar(20) | NO | NULL |
使用客户端程序重命名表的列
除了使用 MySQL 查询重命名 MySQL 数据库中的表的列之外,我们还可以使用客户端程序对表执行 ALTER TABLE 操作。
语法
以下是在各种编程语言中重命名 MySQL 表的列的语法 -
要通过 PHP 程序重命名 MySQL 数据库中表的列,我们需要使用 mysqli 函数 query() 执行 ALTER TABLE 语句,如下所示:-
$sql = "ALTER TABLE table_name RENAME COLUMN old_column1_name TO new_column1_name"; $mysqli->query($sql);
要通过 Node.js 程序将表的列重命名到 MySQL 数据库中,我们需要使用 mysql2 库中的 query() 函数执行 ALTER TABLE 语句,如下所示:-
sql= "ALTER TABLE table_name RENAME COLUMN old_column1_name TO new_column1_name"; con.query(sql);
要通过 Java 程序将表的列重命名到 MySQL 数据库中,我们需要使用 JDBC 函数 executeUpdate() 执行 ALTER TABLE 语句,如下所示:-
String sql = "ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name"; statement.executeUpdate(sql);
要通过 Python 程序将表的列重命名到 MySQL 数据库中,我们需要使用 MySQL Connector/Python 的 execute() 函数执行 ALTER TABLE 语句,如下所示:-
sql = "ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name" 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.
'); // rename column; $sql = "ALTER TABLE tut_tbl RENAME COLUMN tutorial_id TO tutorial_IDs"; if ($mysqli->query($sql)) { printf("Column renamed successfully!.
"); } if ($mysqli->errno) { printf("Columns could be renamed!.
", $mysqli->error); } $mysqli->close();
输出
获得的输出如下 -
Column renamed successfully!.
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 = "USE TUTORIALS" con.query(sql); sql = "CREATE TABLE STUDENTS (ID INT NOT NULL, NAME VARCHAR(40) NOT NULL, AGE INT);" con.query(sql); //重命名前的记录 sql = "DESCRIBE STUDENTS;" con.query(sql, function(err, result){ if (err) throw err console.log(result); console.log("--------------------------"); }); //将列 ID 重命名为"stud_id" sql = "ALTER TABLE STUDENTS RENAME COLUMN ID TO stud_id;" con.query(sql); //重命名后的记录 sql = "DESCRIBE STUDENTS;" con.query(sql, function(err, result){ if (err) throw err console.log(result); }); });
输出
生成的输出如下 -
Connected! -------------------------- [ { Field: 'ID', Type: 'int', Null: 'NO', Key: '', Default: null, Extra: '' }, { Field: 'NAME', Type: 'varchar(40)', Null: 'NO', Key: '', Default: null, Extra: '' }, { Field: 'AGE', Type: 'int', Null: 'YES', Key: '', Default: null, Extra: '' } ] -------------------------- [ { Field: 'stud_id', Type: 'int', Null: 'NO', Key: '', Default: null, Extra: '' }, { Field: 'NAME', Type: 'varchar(40)', Null: 'NO', Key: '', Default: null, Extra: '' }, { Field: 'AGE', Type: 'int', Null: 'YES', Key: '', Default: null, Extra: '' } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class RenameColumn { 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...!"); //Rename column name String sql = "ALTER TABLE tutorials_tbl RENAME COLUMN ID TO tutorial_Id"; statement.executeUpdate(sql); System.out.println("Name renamed successfully...!"); ResultSet resultSet = statement.executeQuery("DESCRIBE tutorials_tbl"); while (resultSet.next()) { System.out.print(resultSet.getString(1)+ " " +resultSet.getString(2)); System.out.println(); } connection.close(); } catch (Exception e) { System.out.println(e); } } }
输出
获得的输出如下所示 -
Connected successfully...! Name renamed successfully...! tutorial_Id int tutorial_title varchar(50) tutorial_author varchar(30)
import mysql.connector #建立连接 connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) table_name = 'NOVELS' old_column_name = 'PAGES' new_column_name = 'PAGES_COUNT' #创建游标对象 cursorObj = connection.cursor() rename_column_query = f"ALTER TABLE {table_name} CHANGE {old_column_name} {new_column_name} INT" cursorObj.execute(rename_column_query) print(f"Column '{old_column_name}' is renamed to '{new_column_name}' in table '{table_name}' successfully.") cursorObj.close() connection.close()
输出
以下是上述代码的输出 -
Column 'tutorial_price' is renamed to 'tutorial_amount' in table 'tutorials_tbl_cloned' successfully.