如何将MySQL的两个表名对调

前言

前段实践遇到个问题,在类似pt-osc场景下,需要将两个表名对调,怎么才能确保万无一失呢?

分析

一些人可能就会想,表名对掉还不简单吗,相互RENAME一下嘛。

但是,我们想要的是同时完成表名对调,如果是先后的对掉,可能会导致有些数据写入失败,那怎么办?

解决

其实也不难,从MySQL手册里就能找到方法,那就是:同时锁定2个表,不允许写入,然后对调表名

我们通常只锁一个表,那么同时锁两个表应该怎么做呢,可以用下面的方法:

LOCK TABLES t1 WRITE, t2 WRITE;
ALTER TABLE t1 RENAME TO t3;
ALTER TABLE t2 RENAME TO t1;
ALTER TABLE t3 RENAME TO t2;
UNLOCK TABLES;

看到了吧,其实很简单,两个表同时加表级写锁,然后用ALTER语法改名就可以了。

以上就是如何将MySQL的两个表名对调的全部内容,希望本文对大家在MySQL的使用中有所帮助。

(0)

相关推荐

  • Mysql数据库名和表名在不同系统下的大小写敏感问题

    这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的.一个特例是 Mac OS X,当缺省的 HFS+ 文件系统使用时.然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小写敏感的就如他们在任一 Unix 上一样.查看章节 1.8.3 MySQL 对 ANSI SQL92 的扩展. 注意:尽管在 Windows 中数据库与表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表.下面的查

  • MySQL表名不区分大小写的设置方法

    原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:1.用root登录,修改 /etc/my.cnf:2.在[mysqld]节点下,加入一行: lower_case_table_names=13.重启MySQL即可: 其中 lower_case_table_names=1 参数缺省地在 Windows 中这个选项为 1 ,在 Unix 中为 0,因此在window中不会遇到的问题,一旦一直到linux就会出问题的原因(尤其在mysql对表起名时是无

  • php获取mysql数据库中的所有表名的代码

    复制代码 代码如下: $server = 'localhost'; $user = 'root'; $pass = ''; $dbname = 'dayanmei_com'; $conn = mysql_connect($server,$user,$pass); if(!$conn) die("数据库系统连接失败!"); mysql_select_db($dbname) or die("数据库连接失败!"); $result = mysql_query("

  • oracle 查询表名以及表的列名

    1.查询表名: 复制代码 代码如下: select table_name,tablespace_name,temporary from user_tables [where table_name=表名] 其中:table_name:表名(varchar2(30)); tablespace_name:存储表名的表空间(varchar2(30)): temporary:是否为临时表(varchar2(1)). eg: select table_name,tablespace_name,tempora

  • Mysql中返回一个数据库的所有表名,列名数据类型备注

    desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_schema select * from columns where table_name='表名'; 顺便记下: show databases; 也可以这样 use information_schema select table_schema,table_name from tables where table_schema='数据

  • MYSQL将表名称修改成大写的存储过程

    本文为大家分享了MYSQL将表名称修改成大写的存储过程,具体内容如下 1. 条件: 1.1 Mysql设置对大小写敏感 2. 执行下述存储过程:  #call uppercase('库名') DROP PROCEDURE IF EXISTS uppercase; CREATE PROCEDURE uppercase(IN dbname VARCHAR(200)) BEGIN DECLARE done INT DEFAULT 0; DECLARE oldname VARCHAR(200); DEC

  • sqlserver 修改列名及表名的sql语句

    代码如下: EXEC sp_rename '表名.[原列名]', '新列名', 'column' Transact-SQL 参考 sp_rename 更改当前数据库中用户创建对象(如表.列或用户定义数据类型)的名称. 语法 sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ] 参数 [@objname =] 'object_name' 是用户对象(

  • 教你如何在windows与linux系统中设置MySQL数据库名、表名大小写敏感

    在 MySQL 中,数据库和表其实就是数据目录下的目录和文. 因而,操作系统的敏感性决定数据库和表命名的大小写敏感.这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix/Linux 系统中是大小写敏感的. MySQL大小写敏感可以通过配置文件的lower_case_table_names参数来控制. WINDOWS: 编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_names=0 (备注:为0时大小

  • SQLSERVER查询所有数据库名,表名,和字段名的语句

    1.获取所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.获取所有表名: SELECT Name FROM DatabaseName..SysObjects Where XType='U' ORDER BY Name XType='U':表示所有用户表; XType='S':表示所有系统表; 3.获取所有字段名: SELECT Name FROM SysColumns WHERE id=Object_Id('TableNa

  • 深入mysql存储过程中表名使用参数传入的详解

    BEGIN declare date_str varchar(8);declare table_prefix varchar(20);set table_prefix='mail_rare_visit_';set date_str = DATE_FORMAT(CURRENT_DATE(),'%Y%m%d');set @table_name = concat(table_prefix, date_str);set @s = concat('CREATE TABLE ', @table_name,

随机推荐