MySQL - 重命名表
在某些情况下,用户和数据库管理员可能都希望更改关系数据库中表的名称,以使表的名称更适合特定情况。
MySQL 提供了两种不同的重命名 MySQL 表的方法。我们可以使用 RENAME TABLE 或 ALTER TABLE 语句。在本教程中,我们将通过合适的示例来理解它们。
MySQL RENAME TABLE 语句
MySQL RENAME TABLE 语句用于将数据库中的现有表重命名为其他名称。
语法
以下是 MySQL RENAME TABLE 语句的基本语法 -
将表 table_name 重命名为 new_name;
其中,table_name 是现有表的名称,new_name 是要指定的新名称。
示例
首先,我们使用 CREATE 语句在 MySQL 数据库中创建一个名为 CUSTOMERS 的表,如下所示 -
CREATE TABLE CUSTOMERS ( ID INT, NAME VARCHAR(20), AGE INT );
在这里,我们使用以下查询将上面创建的 CUSTOMERS 表重命名为 BUYERS -
将 CUSTOMERS 表重命名为 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;
正如我们在下面的输出中看到的,上述表已成功创建。
Tables_in_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;
正如我们在下面看到的输出,所有三个表都已成功重命名。
Tables_in_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/Python 的 execute() 函数执行 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" }); //连接到 MySQL con.connect(function (err) { if (err) throw err; console.log("Connected!"); console.log("--------------------------"); //创建数据库 sql = "CREATE DATABASE tutorials" con.query(sql); //选择数据库 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); //插入记录 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 ode_modules\mysql2\lib\packets\packet.js:728:17) at Query.execute (C:\Users\Lenovo\desktop\JavaScript ode_modules\mysql2\lib\commands\command.js:29:26) at Connection.handlePacket (C:\Users\Lenovo\desktop\JavaScript ode_modules\mysql2\lib\connection.js:478:34) at PacketParser.onPacket (C:\Users\Lenovo\desktop\JavaScript ode_modules\mysql2\lib\connection.js:97:12) at PacketParser.executeStart (C:\Users\Lenovo\desktop\JavaScript ode_modules\mysql2\lib\packet_parser.js:75:16) at Socket.(C:\Users\Lenovo\desktop\JavaScript ode_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://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 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 #建立连接 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.