Code前端首页关于Code前端联系我们

MySQL 学习简介:RENAME TABLE 语句和 ALTER TABLE 语句重命名表

terry 2年前 (2023-09-26) 阅读数 43 #数据库

了解如何使用 MySQL RENAME TABLE 语句和 表重命名 TABLE 表。

MySQL RENAME TABLE语句介绍

由于业务需求的变化,我们需要将当前表重命名为新表,以更好地反映或代表新的情况。 MySQL 提供了一种非常有用的语句来更改一个或多个表的名称。

要更改一个或多个表,我们使用语句 RENAME TABLE,如下所示:

RENAME TABLE old_table_name TO new_table_name;
SQL

旧表 (_able) 必须存在且新表 () new_tablename) 不得存在。如果新表 new_table_name 存在,此语句将失败。

除了表之外,我们还可以使用语句RENAME TABLE来重命名视图。

在执行RENAME TABLE语句之前,请确保没有活动事务或锁定的表。

请注意,临时表无法使用 RENAME TABLE 语句重命名,但可以使用 ALTER TABLE 语句重命名临时表。

为了安全,我们授予旧表的所有权限都必须手动迁移到新表。

在重命名表之前,您应该仔细评估其影响。例如,您应该检查哪些应用程序使用该表。如果表的名称发生更改,则引用该表名称的应用程序代码也必须更改。此外,您还必须手动调整引用该表的其他数据库对象,例如视图、存储过程、触发器、外键约束等。我们将在下面的示例中更详细地讨论这一点。 ? 部门。

MySQL学习入门教程:RENAME TABLE语句和ALTER TABLE语句重命名表

创建数据库 -

CREATE DATABASE IF NOT EXISTS hrdb;
SQL

创建表 -

USE hrdb;

CREATE TABLE departments (
    department_id INT AUTO_INCREMENT PRIMARY KEY,
    dept_name VARCHAR(100)
);

CREATE TABLE employees (
    id int AUTO_INCREMENT primary key,
    first_name varchar(50) not null,
    last_name varchar(50) not null,
    department_id int not null,
    FOREIGN KEY (department_id)
        REFERENCES departments (department_id)
);
SQL

接下来,在❝ee和部门插入示例数据表中

第三个,查询员工和和和部门的数据: SQL 重命名视图引用的表

If对视图引用的表进行重命名,重命名后视图失效,必须手动调整视图。

例如,我们根据employees

和表创建一个名为v_employeeinfo的视图,如下所示:

CREATE VIEW v_employee_info as
    SELECT 
        id, first_name, last_name, dept_name
    from
        employees
            inner join
        departments USING (department_id);
SQL 参见使用内连接子句进行连接员工部门表。

以下 SELECT 语句返回视图 v_employee_info 中的所有数据。

mysql> SELECT 
    *
FROM
    v_employee_info;
+----+------------+-----------+------------+
| id | first_name | last_name | dept_name  |
+----+------------+-----------+------------+
|  1 | John       | Doe       | Sales      |
|  2 | Bush       | Lily      | Markting   |
|  3 | David      | Dave      | Finance    |
|  4 | Mary       | Jane      | Accounting |
|  5 | Jonatha    | Josh      | Warehouses |
|  6 | Mateo      | More      | Sales      |
+----+------------+-----------+------------+
6 rows in set
SQL

现在重命名v_employeeinfo♝view♽‼♝ 中的表employees并查询视图数据。

RENAME TABLE employees TO people;

-- 查询数据
SELECT 
    *
FROM
    v_employee_info;
SQL

MySQL 返回以下错误信息:

1356 - View 'hrdb.v_employee_info' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
SQL

我们可以使用 CHECK❀❀ 语句来 check_v 员工信息 视图的状态如下:

CHECK TABLE v_employee_info;
mysql> CHECK TABLE v_employee_info;
+----------------------+-------+----------+----------------------------------------------------------------------------------------------------------------------------------------+
| Table                | Op    | Msg_type | Msg_text                                                                                                                               |
+----------------------+-------+----------+----------------------------------------------------------------------------------------------------------------------------------------+
| hrdb.v_employee_info | check | Error    | Table 'hrdb.employees' doesn't exist                                                                                                   |
| hrdb.v_employee_info | check | Error    | View 'hrdb.v_employee_info' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them |
| hrdb.v_employee_info | check | error    | Corrupt                                                                                                                                |
+----------------------+-------+----------+----------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set
SQL

需要手动更改视图v_employeeinfo以引用表而不是❀ people employees

表。

重命名存储过程引用的表

要重命名存储过程引用的表,您必须像对视图一样进行手动调整。

首先将 people 表重命名为 employees 表。

RENAME TABLE people TO employees;
SQL

接下来,创建一个名为 get_employee 的新存储过程,该存储过程引用 employees❙ 表。

DELIMITER $$

CREATE PROCEDURE get_employee(IN p_id INT)

BEGIN
 SELECT first_name
 ,last_name
 ,dept_name
 FROM employees
 INNER JOIN departments using (department_id)
 WHERE id = p_id;
END $$

DELIMITER;
SQL

接下来,执行存储过程get_employee来检索 ide

表。 1中员工的数据如下:

CALL get_employee(1);
SQL

执行上述查询语句,得到以下结果-

mysql> CALL get_employee(1);
+------------+-----------+-----------+
| first_name | last_name | dept_name |
+------------+-----------+-----------+
| John       | Doe       | Sales     |
+------------+-----------+-----------+
1 row in set

Query OK, 0 rows affected
SQLrenameder es
表到 桌子。

RENAME TABLE employees TO people;
SQL- SQL

MySQL 返回以下错误消息:

1146 - Table 'hrdb.employees' doesn't exist
SQL

要解决此问题,我们需要手动更改表 employees存储过程到

SELECT 
    last_name
FROM
    unique_lastnames;

+-----------+
| last_name |
+-----------+
| Doe       |
| Lily      |
| Dave      |
| Jane      |
| Josh      |
| More      |
+-----------+
6 rows in set
表。

重命名引用外键的表。表

departments 使用列 department-id 链接到表 employeesemployees 表的 department-id 列是对表中 department-id❀♽department 列的引用。作为外键。

如果重命名 departments 表,指向 departments 表的所有外键将不会自动更新。在这种情况下,我们必须手动删除并重新创建外键。

RENAME TABLE departments TO depts;
SQL

我们将的部门删除为1,并且由于外键的限制,❝pe❝中的所有行也必须❝pe。但是我们将 departments 表重命名为 depts 表,而没有手动更新外键,MySQL 返回错误如下: ‸ee sweet 上述语句,你得到以下错误消息 -

1451 - Cannot delete or update a parent row: a foreign key constraint fails (`hrdb`.`people`, CONSTRAINT `people_ibfk_1` FOREIGN KEY (`department_id`) REFERENCES `depts` (`department_id`))
SQL

重命名多个表

您还可以使用 RENAME TABLE 一次重命名多个表语句。请参见以下语句:

RENAME TABLE old_table_name_1 TO new_table_name_2,
             old_table_name_2 TO new_table_name_2,...
SQL

以下语句将 peopledeptses❝e 重命名为部门 表:

RENAME TABLE depts TO departments,
             people TO employees;
SQL

请注意,语句 RENAME TABLE 不是原子的。因此,如果任何时候发生错误,MySQL 都会将所有重命名的表回滚到原来的名称。

使用 ALTER TABLE 语句重命名表

我们可以使用 ALTER TABLE 语句重命名表,如下所示: SQL 不能使用语句 要重命名临时表,可以使用语句 ALTER TABLE 重命名临时表。

重命名临时表示例

首先,我们创建一个临时表,其中包含表 ❀❙❀❙ SQL 中列 lastname 中的所有唯一姓氏

第二步,使用RENAME TABLE重命名姓氏表:

RENAME TABLE lastnames TO unique_lastnames;
SQLRENAME TABLE出现以下错误信息:SQL

第三,使用语句ALTER TABLE 重命名姓氏表。

ALTER TABLE lastnames
RENAME TO unique_lastnames;
SQL 教程,我们向您展示如何使用 MySQL RENAME TABLEALTER TABLE 语句来重命名表。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门