MySQL - 重命名錶



在關係資料庫中,使用者和資料庫管理員可能都需要更改表名以使其更適合特定情況。

MySQL 提供兩種不同的方法來重新命名 MySQL 表。我們可以使用 **RENAME TABLE** 或 **ALTER TABLE** 語句。在本教程中,我們將透過合適的示例來理解它們。

MySQL RENAME TABLE 語句

MySQL RENAME TABLE 語句用於將資料庫中現有表的名稱更改為另一個名稱。

語法

以下是 MySQL RENAME TABLE 語句的基本語法:

RENAME TABLE table_name TO new_name;

其中,table_name 是現有表的名稱,new_name 是您要分配的新名稱。

示例

讓我們首先使用 CREATE 語句在 MySQL 資料庫中建立一個名為 **CUSTOMERS** 的表,如下所示:

CREATE TABLE CUSTOMERS (
	ID INT,
	NAME VARCHAR(20),
	AGE INT
);

在這裡,我們使用以下查詢將上面建立的 CUSTOMERS 表重新命名為 **BUYERS**:

RENAME TABLE CUSTOMERS to BUYERS;

輸出

表已重新命名,沒有任何錯誤。

Query OK, 0 rows affected (0.01 sec)

驗證

執行以下查詢以檢索 CUSTOMERS 表的描述:

DESC CUSTOMERS;

它將顯示錯誤,因為我們已將 CUSTOMERS 表的名稱更改為 BUYERS,並且我們的資料庫中不存在 CUSTOMERS 表。

ERROR 1146 (42S02): Table 'tutorials.customers' doesn't exist

重新命名多個表

使用 MySQL RENAME TABLE 語句,我們還可以用單個查詢重新命名多個表。

語法

以下是使用 MySQL RENAME TABLE 語句重新命名多個表的語法:

RENAME TABLE old_table1 TO new_table1,
   old_table2 TO new_table2,
   old_table3 TO new_table3;

示例

在下面的示例中,我們建立了三個不同的表,名為 **Cust1**、**Cust2** 和 **Cust3**:

CREATE TABLE Cust1(ID INT);
CREATE TABLE Cust2(ID INT);
CREATE TABLE Cust3(ID INT);

在這裡,我們使用以下查詢驗證上述表是否已建立:

SHOW TABLES;

正如我們在下面的輸出中看到的,上述表已成功建立。

tutorials 中的表
cust1
cust2
cust3

現在,讓我們使用以下查詢重新命名所有上述建立的表:

RENAME TABLE Cust1 TO Buyer1, Cust2 TO Buyer2, Cust3 TO Buyer3;

輸出

所有三個表都已重新命名,沒有任何錯誤。

Query OK, 0 rows affected (0.03 sec)

驗證

讓我們再次驗證表的列表,以查詢表名是否已更改:

SHOW TABLES;

正如我們在下面的輸出中看到的,所有三個表都已成功重新命名。

tutorials 中的表
buyer1
buyer2
buyer3

使用 ALTER TABLE 語句重命名錶

在 MySQL 中,我們還可以使用帶有 **ALTER TABLE** 語句的 RENAME 來修改現有表的名稱。

語法

以下是使用 ALTER TABLE 語句重命名錶的語法:

ALTER TABLE existing_table_name RENAME TO new_table_name

示例

在以下查詢中,我們建立了一個名為 **PLAYERS** 的表。

CREATE TABLE PLAYERS (
	ID INT,
	NAME VARCHAR(20),
	AGE INT
);

現在,讓我們使用以下查詢將上面建立的表重新命名為新的名稱 **TEAMS**:

ALTER TABLE PLAYERS RENAME TO TEAMS;

輸出

表已重新命名,沒有任何錯誤。

Query OK, 0 rows affected (0.02 sec)

驗證

執行以下查詢以檢索 PLAYERS 表的描述:

DESC PLAYERS;

它將顯示錯誤,因為我們已將 PLAYERS 表重新命名為 TEAMS,並且我們的資料庫中不存在 PLAYERS 表。

ERROR 1146 (42S02): Table 'tutorials.players' doesn't exist

使用客戶端程式重命名錶

除了使用 MySQL 查詢在 MySQL 資料庫中重命名錶外,我們還可以使用客戶端程式對錶執行 RENAME TABLE 操作。

語法

以下是各種程式語言中在 MySQL 資料庫中重命名錶的語法:

要透過PHP程式重新命名MySQL資料庫中的表,需要使用mysqli函式query()執行RENAME TABLE語句,如下所示:

$sql = "RENAME TABLE old_table_name TO new_table_name";
$mysqli->query($sql);

要透過Node.js程式重新命名MySQL資料庫中的表,需要使用mysql2庫的query()函式執行RENAME TABLE語句,如下所示:

sql = "RENAME TABLE table_name TO new_name";
con.query(sql);

要透過Java程式重新命名MySQL資料庫中的表,需要使用JDBC函式executeUpdate()執行RENAME TABLE語句,如下所示:

String sql = "RENAME TABLE old_table_name TO new_table_name";
statement.executeUpdate(sql);

要透過Python程式重新命名MySQL資料庫中的表,需要使用MySQL Connector/Pythonexecute()函式執行RENAME TABLE語句,如下所示:

sql = "RENAME TABLE old_table_name TO new_table_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.
'); $sql = "RENAME TABLE tutorials_table TO tutorials_tbl "; if ($mysqli->query($sql)) { printf("table renamed successfully.
"); } if ($mysqli->errno) { printf("table could not rename: %s
", $mysqli->error); } $mysqli->close();

輸出

獲得的輸出結果如下:

table 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("--------------------------");

  //Creating a Database
  sql = "CREATE DATABASE tutorials"
  con.query(sql);

  //Selecting a Database
  sql = "USE tutorials"
  con.query(sql);

  //Creating DEMO table
  sql = "CREATE TABLE Demo(ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255));"
  con.query(sql);

  //Inserting records
  sql = "INSERT INTO Demo VALUES(1, 'Shikhar', 'Dhawan'),(2, 'Jonathan', 'Trott'),(3, 'Kumara', 'Sangakkara');"
  con.query(sql);

  //Fetching the DEMO table
  sql = "SELECT * FROM Demo;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log("**Following is the DEMO table**");
    console.log(result);
    console.log("--------------------------");
  });

  //Renaming the DEMO table as PLAYERS
  sql = "RENAME TABLE Demo to Players;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log("**Renamed the DEMO table as Players**");
    console.log(result);
    console.log("--------------------------");
  });

  //Trying to Retrieve the DEMO table, Leads to an error.
  sql = "SELECT * FROM Demo;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log("Trying to retrieve DEMO table");
    console.log(result);
  });
});                   

輸出

生成的輸出結果如下:

Connected!
--------------------------
**Following is the DEMO table**
[
  { ID: 1, First_Name: 'Shikhar', Last_Name: 'Dhawan' },
  { ID: 2, First_Name: 'Jonathan', Last_Name: 'Trott' },
  { ID: 3, First_Name: 'Kumara', Last_Name: 'Sangakkara' }
]
--------------------------
**Renamed the DEMO table as Players**
ResultSetHeader {
  fieldCount: 0,
  affectedRows: 0,
  insertId: 0,
  info: '',
  serverStatus: 2,
  warningStatus: 0,
  changedRows: 0
}
--------------------------
C:\Users\Lenovo\desktop\JavaScript\connectDB.js:52
    if (err) throw err
             ^

Error: Table 'tutorials.demo' doesn't exist
    at Packet.asError (C:\Users\Lenovo\desktop\JavaScript\node_modules\mysql2\lib\packets\packet.js:728:17)
    at Query.execute (C:\Users\Lenovo\desktop\JavaScript\node_modules\mysql2\lib\commands\command.js:29:26)
    at Connection.handlePacket (C:\Users\Lenovo\desktop\JavaScript\node_modules\mysql2\lib\connection.js:478:34)
    at PacketParser.onPacket (C:\Users\Lenovo\desktop\JavaScript\node_modules\mysql2\lib\connection.js:97:12)
    at PacketParser.executeStart (C:\Users\Lenovo\desktop\JavaScript\node_modules\mysql2\lib\packet_parser.js:75:16)
    at Socket. (C:\Users\Lenovo\desktop\JavaScript\node_modules\mysql2\lib\connection.js:104:25)
    at Socket.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:315:12)
    at readableAddChunk (node:internal/streams/readable:289:9)
    at Socket.Readable.push (node:internal/streams/readable:228:10) {
  code: 'ER_NO_SUCH_TABLE',
  errno: 1146,
  sqlState: '42S02',
  sqlMessage: "Table 'tutorials.demo' doesn't exist",
  sql: 'SELECT * FROM Demo;',
  fatal: true
}        
import java.sql.*;
public class RenameTable {
    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 tables...!
            String sql = "RENAME TABLE tutorials_tbl TO new_table";
            statement.executeUpdate(sql);
            System.out.println("Table renamed successfully successfully...!");
            connection.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}                                

輸出

獲得的輸出結果如下所示:

Table renamed successfully successfully...!      
import mysql.connector
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
old_table_name = 'tutorials_tbl'
new_table_name = 'tutorials_table'
#Creating a cursor object
cursorObj = connection.cursor()
cursorObj.execute(f"RENAME TABLE {old_table_name} TO {new_table_name}")
print(f"Table '{old_table_name}' is renamed to '{new_table_name}' successfully.")
cursorObj.close()
connection.close()                                           

輸出

以下是上述程式碼的輸出結果:

Table 'tutorials_tbl' is renamed to 'tutorials_table' successfully.
廣告