- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL 重命名表的操作方法及注意事项由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
。
使用 rename table 语句或 alter table 语句都可以对表进行重命名,基本语法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# rename
table
语法:
rename
table
tbl_name
to
new_tbl_name
[, tbl_name2
to
new_tbl_name2] ...
#
alter
table
语法:
alter
table
old_table rename new_table;
# 具体示例:
mysql> show tables;
+
------------------+
| tables_in_testdb |
+
------------------+
| tb1 |
| tb2 |
+
------------------+
2
rows
in
set
(0.00 sec)
mysql> rename
table
tb1
to
new_tb1;
query ok, 0
rows
affected (0.03 sec)
mysql>
alter
table
tb2 rename new_tb2;
query ok, 0
rows
affected (0.04 sec)
mysql> show tables;
+
------------------+
| tables_in_testdb |
+
------------------+
| new_tb1 |
| new_tb2 |
+
------------------+
2
rows
in
set
(0.00 sec)
|
显然易见,在执行重命名表时,旧表(old_table_name)必须存在,而新表(new_table_name)一定不存在。如果新表 new_table_name 确实存在,该语句将失败.
执行重命名表的用户必须具有原始 table 的 alter 和 drop 权限,以及新 table 的 create 和 insert 权限。与 alter table 不同,rename table 可以在单个语句中重命名多个表:
1
2
3
|
rename
table
old_table1
to
new_table1,
old_table2
to
new_table2,
old_table3
to
new_table3;
|
若一次性重命名多个表,则重命名操作从左到右执行。因此,要交换两个表名,可以执行此操作(假设中间表名称为tmp_table且不存在):
1
2
3
|
rename
table
old_table
to
tmp_table,
new_table
to
old_table,
tmp_table
to
new_table;
|
通过重命名表,我们还可以将一个表从一个数据库移动到另一个数据库中,语法如下:
1
2
3
4
5
6
7
8
9
10
|
rename
table
current_db.tbl_name
to
other_db.tbl_name;
alter
table
current_db.tbl_name rename other_db.tbl_name;
# 拼接sql 实现将某个数据库中的表全部转移至另一个数据库中
select
concat(
'rename table old_db.'
, table_name,
' to new_db.'
, table_name,
';'
)
from
information_schema.tables
where
table_schema =
'old_db'
;
|
事实上,mysql 并没有提供重命名数据库的操作,我们可以通过将某个库的所有表都通过重命名转移的另一个库中,来间接实现重命名库,只是原库仍然存在.
。
值得注意的是,重命名操作是原子完成的,需要获取该表的元数据锁,因此我们在执行 rename table 前,要确保该表没有活跃的事务且没有被锁定。因为只需更改元数据,所以对于大表重命名也是很迅速的。此外,如果该表具有触发器,则无法将该表通过重命名方式转移到另外一个库中.
其实,rename table 语句和 alter table 语句还是有部分区别的,查询官方文档,主要有几点如下:
虽然重命名操作快捷迅速,但实际生产场景中,对于表的重命名还是要慎重考虑,也许你的重命名操作没问题,但后续对象之间的依赖调用可能出现问题。比如你将一个表 tb1 重命名为 new_tb1,若有视图及函数依赖 tb1 ,并且你没及时修改这些视图及函数的话,那么再次调用这些视图和函数就可能报错 tb1 不存在,因为在这些视图及函数的定义中,仍用的是 tb1 的名称。此外重命名表或视图后,要注意用户权限问题,如果有显式指定某个用户对该表的权限,则需要重新赋予对新表的权限。若表中存在外键等约束时,执行重命名操作也要格外小心,做好检查.
。
本篇文章主要介绍了重命名表的操作方法及注意事项,将本文的重点总结如下:
rename table 语句和 alter table 语句都可以对表进行重命名,二者稍有区别,更推荐用 rename table 语句.
重命名操作需要获取元数据锁,执行前要确保无活跃事务占用.
通过重命名表,可以将一个表从一个数据库转移到另一个数据库中,间接实现重命名数据库.
实际生产场景,重命名表要慎重考虑,特别是存在视图及函数依赖的.
重命名操作执行完成后,要检查用户权限及相关依赖问题,及时将依赖关系中的表名改为新的表名.
若表中存在触发器或外键等约束,重命名时要格外注意.
重命名操作一般在秒级完成,若执行时间过长,请检查链接状态.
以上就是mysql 重命名表相关知识总结的详细内容,更多关于mysql 重命名表的资料请关注我其它相关文章! 。
最后此篇关于MySQL 重命名表的操作方法及注意事项的文章就讲到这里了,如果你想了解更多关于MySQL 重命名表的操作方法及注意事项的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!