MySQL 学习简介:RENAME TABLE 语句和 ALTER TABLE 语句重命名表
了解如何使用 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 语句重命名临时表。
为了安全,我们授予旧表的所有权限都必须手动迁移到新表。
在重命名表之前,您应该仔细评估其影响。例如,您应该检查哪些应用程序使用该表。如果表的名称发生更改,则引用该表名称的应用程序代码也必须更改。此外,您还必须手动调整引用该表的其他数据库对象,例如视图、存储过程、触发器、外键约束等。我们将在下面的示例中更详细地讨论这一点。 ? 部门。
创建数据库 -
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对视图引用的表进行重命名,重命名后视图失效,必须手动调整视图。
例如,我们根据 和表创建一个名为 以下 SELECT 语句返回视图 现在重命名 MySQL 返回以下错误信息: 我们可以使用 需要手动更改视图 重命名存储过程引用的表 要重命名存储过程引用的表,您必须像对视图一样进行手动调整。 首先将 接下来,创建一个名为 接下来,执行存储过程 执行上述查询语句,得到以下结果- MySQL 返回以下错误消息: 要解决此问题,我们需要手动更改表 重命名引用外键的表。表 如果重命名 我们将 您还可以使用 以下语句将 请注意,语句 使用 ALTER TABLE 语句重命名表 我们可以使用 重命名临时表示例 首先,我们创建一个临时表,其中包含表 ❀❙❀❙ SQL 中列 第二步,使用 第三,使用语句employees
v_employeeinfo
的视图,如下所示:
SQL 参见使用内连接子句进行连接CREATE VIEW v_employee_info as
SELECT
id, first_name, last_name, dept_name
from
employees
inner join
departments USING (department_id);
员工
和部门
表。 v_employee_info
中的所有数据。
SQLmysql> 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
v_employeeinfo♝view♽‼♝ 中的表
表到employees
并查询视图数据。
SQLRENAME TABLE employees TO people;
-- 查询数据
SELECT
*
FROM
v_employee_info;
SQL1356 - 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
CHECK❀❀ 语句来 check_v 员工信息 视图的状态如下:
表。
SQL 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
v_employeeinfo
以引用表而不是❀ people employeespeople
表重命名为 employees
表。
SQLRENAME TABLE people TO employees;
get_employee
的新存储过程,该存储过程引用 employees❙ 表。
表。
SQLDELIMITER $$
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;
get_employee
来检索 ide 1
中员工的数据如下:
SQLCALL get_employee(1);
SQLrenameder esmysql> CALL get_employee(1);
+------------+-----------+-----------+
| first_name | last_name | dept_name |
+------------+-----------+-----------+
| John | Doe | Sales |
+------------+-----------+-----------+
1 row in set
Query OK, 0 rows affected
桌子。
SQL- SQL RENAME TABLE employees TO people;
SQL1146 - Table 'hrdb.employees' doesn't exist
employees
存储过程到
表。 SELECT
last_name
FROM
unique_lastnames;
+-----------+
| last_name |
+-----------+
| Doe |
| Lily |
| Dave |
| Jane |
| Josh |
| More |
+-----------+
6 rows in set
departments
使用列 department-id
链接到表 employees
。 employees
表的 department-id
列是对表中 department-id❀♽department 列的引用。作为外键。
departments
表,指向 departments
表的所有外键将不会自动更新。在这种情况下,我们必须手动删除并重新创建外键。
SQLRENAME TABLE departments TO depts;
的部门删除为
1
,并且由于外键的限制,❝pe❝中的所有行也必须❝pe。但是我们将 departments
表重命名为 depts
表,而没有手动更新外键,MySQL 返回错误如下: ‸ee sweet 上述语句,你得到以下错误消息 -
SQL 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`))
重命名多个表
RENAME TABLE
一次重命名多个表语句。请参见以下语句:
SQLRENAME TABLE old_table_name_1 TO new_table_name_2,
old_table_name_2 TO new_table_name_2,...
people
和 deptses❝e 重命名为
和 部门
表:
SQLRENAME TABLE depts TO departments,
people TO employees;
RENAME TABLE
不是原子的。因此,如果任何时候发生错误,MySQL 都会将所有重命名的表回滚到原来的名称。 ALTER TABLE
语句重命名表,如下所示: SQL 不能使用语句 要重命名临时表,可以使用语句 ALTER TABLE
重命名临时表。 lastname
中的所有唯一姓氏RENAME TABLE
重命名姓氏表:
SQLRENAME TABLE出现以下错误信息:SQLRENAME TABLE lastnames TO unique_lastnames;
ALTER TABLE
重命名姓氏表。
SQL 教程,我们向您展示如何使用 MySQL ALTER TABLE lastnames
RENAME TO unique_lastnames;
RENAME TABLE
和 ALTER TABLE
语句来重命名表。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。