zoukankan      html  css  js  c++  java
  • 翻译:MariaDB RENAME TABLE语句

    本文为mariadb官方手册:rename table的译文。

    原文:https://mariadb.com/kb/en/library/rename-table/

    我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/rename-table/

    Syntax

    RENAME TABLE tbl_name 
      [WAIT n | NOWAIT]
      TO new_tbl_name
        [, tbl_name2 TO new_tbl_name2] ...
    

    Description

    该语句可以重命名一个或多个表或视图,但不会改变与它们相关的权限。

    rename操作是原子性的,这意味着其他会话无法访问正在执行的rename语句所涉及的表。无法命名为已存在的表或视图,但可以通过小技巧来实现。例如,如果已存在一个表old_table,可以创建另一个具有相同结构的空表new_table,然后使用该空表替换已存在的表(假定不存在backup_table表):

    CREATE TABLE new_table (...);
    RENAME TABLE old_table TO backup_table, new_table TO old_table;
    

    tab_name可以指定为db_name.tbl_name。见Identifier Qualifiers。这使得RENAME可以将表从一个数据库移动到另一个数据库下(只要两个数据库在同一文件系统下):

    RENAME TABLE db1.t TO db2.t;
    

    注意,如果已经存在涉及表的触发器,则无法跨数据库移动,将产生类似如下的错误信息:

    ERROR 1435 (HY000): Trigger in wrong schema
    

    视图同样无法跨数据库移动:

    ERROR 1450 (HY000): Changing schema from 'old_db' to 'new_db' is not allowed.
    

    RENAME TABLE无法操作临时表,可以使用ALTER TABLE来实现:

    CREATE TEMPORARY TABLE t1 (c INT);
    ALTER TABLE t1 RENAME TO t2;
    

    如果RENAME TABLE重命名了多于一个表且其中一个命名失败时,所有的包括已经执行命名操作的表都会回滚,因为rename操作是原子性的。

    rename操作按照语句中指定的顺序对表进行重命名。鉴于此,可以交换两表之间的数据:

    RENAME TABLE t1 TO tmp_table,
        t2 TO t1,
        tmp_table TO t2;
    

    从MariaDB 10.3.0开始,引入WAIT/NOWAIT选项,可以设置锁等待超时时间。见我的另一篇翻译:WAIT and NOWAIT

  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/7595470.html
Copyright © 2011-2022 走看看