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://: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.
廣告