MySQL - 重命名列



MySQL 中的 ALTER TABLE 语句可用于更改表结构。例如,我们可以使用此语句添加、删除或重命名列等。

以下是可与 ALTER TABLE 语句一起使用以重命名表的列的两种选项

  • RENAME COLUMN
  • CHANGE COLUMN

注意:重命名表的列需要 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 表中有三列:

字段 类型 NULL 默认值 额外
ID int NULL
名称 varchar(20) NULL
年龄 int 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。

字段 类型 NULL 默认值 额外
cust_id int NULL
名称 varchar(20) NULL
年龄 int 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;

从输出表中我们可以看到,上述列已成功重命名。

字段 类型 NULL 默认值 额外
cust_id int NULL
cust_name varchar(20) NULL
cust_age int NULL

使用 CHANGE COLUMN

在 MySQL 中,我们可以使用 **ALTER TABLE ... CHANGE COLUMN** 命令更改一个或多个列的名称及其数据类型。

语法

以下是 MySQL 中 ALTER TABLE ... CHANGE 命令的语法:

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name Data Type;

示例

考虑先前更新的 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;

列的名称和数据类型已成功更改。

字段 类型 NULL 默认值 额外
ID varchar(10) NULL
cust_name varchar(20) NULL
cust_age int 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;

从输出表中我们可以看到,上述列的名称和数据类型已成功更改。

字段 类型 NULL 默认值 额外
ID varchar(10) NULL
名称 decimal(18,2) NULL
年龄 varchar(20) NULL

使用客户端程序重命名表的列

除了使用 MySQL 查询在 MySQL 数据库中重命名表的列之外,我们还可以使用客户端程序对表执行 ALTER TABLE 操作。

语法

以下是各种编程语言中重命名 MySQL 表列的语法:

要在 MySQL 数据库中通过 PHP 程序重命名表的列,我们需要使用 **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"
});

  //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 STUDENTS (ID INT NOT NULL, NAME VARCHAR(40) NOT NULL, AGE INT);"
  con.query(sql);

  //Records before renaming
  sql = "DESCRIBE STUDENTS;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log(result);
    console.log("--------------------------");
  });

  //Renaming column ID to "stud_id"
  sql = "ALTER TABLE STUDENTS RENAME COLUMN ID TO stud_id;"
  con.query(sql);

  //Records after renaming
  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://127.0.0.1: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
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
table_name = 'NOVELS'
old_column_name = 'PAGES'
new_column_name = 'PAGES_COUNT'
#Creating a cursor object 
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.
广告