Mysql中如何实现两列的值互换

 更新时间:2024年11月11日 11:34:29   作者:无敌小肥007  
这篇文章主要来和大家探讨一下Mysql中如何实现两列的值互换,文中为大家提供了一些常用的方法,希望对大家有一定的帮助

Mysql中如何实现两列的值互换

如图,因业务要求,需要把某两列的值互换。

1、第一感觉此sql应该能处理问题了

UPDATE students
SET name = other_name,
    other_name = name;

结果是这样。。。没搞定

2、需要一个地方存要替换的值,不然两列搞不定

2.1 加第三列?(能解决,但是看起来呆呆)

-- 新增列
ALTER TABLE students
ADD COLUMN swap_col VARCHAR(255);

-- 赋值
UPDATE students
SET swap_col = other_name;

UPDATE students
SET other_name = name;

UPDATE students
SET name = swap_col;

-- 删除列
ALTER TABLE students
DROP COLUMN swap_col;
-- 

2.2 上临时表(搞点弯路走走)

-- 创建临时表
CREATE TEMPORARY TABLE `students_temp`
(
    `id`         int,
    `name`       varchar(255),
    `other_name` varchar(255),
    INDEX `idx_id` (`id`),
    INDEX `idx_name` (`name`),
    INDEX `idx_other_name` (`other_name`)
);

-- 给临时表赋值
INSERT INTO students_temp
SELECT id, name, other_name
FROM students;

-- 联表更新
UPDATE students AS target
    INNER JOIN students_temp AS source
    ON target.id = source.id
SET target.name       = source.other_name,
    target.other_name = source.name;

-- 删除临时表
DROP TABLE students_temp;

示例sql

DROP table if exists `students`;

CREATE TABLE `students` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `other_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
);

INSERT INTO `students` VALUES (1, '张三', '张三1');
INSERT INTO `students` VALUES (2, '李四', '李四1');
INSERT INTO `students` VALUES (3, '王五', '王五1');
INSERT INTO `students` VALUES (4, '赵六', '赵六');
INSERT INTO `students` VALUES (5, '孙七', '孙七');
INSERT INTO `students` VALUES (6, '张三', '张三2');
INSERT INTO `students` VALUES (7, '李四', '李四2');
INSERT INTO `students` VALUES (8, '张三', '张三3');

到此这篇关于Mysql中如何实现两列的值互换的文章就介绍到这了,更多相关Mysql两列值互换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中获取时间的所有方法小结

    MySQL中获取时间的所有方法小结

    在MySQL数据库开发中,获取时间是一个常见的需求,MySQL提供了多种方法来获取当前日期、时间和时间戳,并且可以对时间进行格式化、计算和转换,本文介绍了一些常用的MySQL时间函数及其示例,需要的朋友可以参考下
    2024-07-07
  • MYSQL查看表是否被锁以及解锁过程

    MYSQL查看表是否被锁以及解锁过程

    这篇文章主要介绍了MYSQL查看表是否被锁以及解锁过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-10-10
  • mysql深度分页的问题解决

    mysql深度分页的问题解决

    本文主要介绍了mysql深度分页的问题解决,解决方案包括子查询、INNER JOIN延迟关联及标签记录法,通过减少回表次数或避免重复扫描提升查询效率,下面就一起来了解一下
    2025-07-07
  • Linux下实现MySQL数据备份和恢复的命令使用全攻略

    Linux下实现MySQL数据备份和恢复的命令使用全攻略

    这篇文章主要介绍了Linux下实现MySQL数据备份和恢复的命令使用全攻略,包括使用Mysqldump和LVM快照以及xtrabackup三种方法,倾力推荐!需要的朋友可以参考下
    2015-11-11
  • Mysql连接本地报错:1130-host ... is not allowed to connect to this MySQL server解决

    Mysql连接本地报错:1130-host ... is not allowed to connect t

    这篇文章主要给大家介绍了关于Mysql连接本地报错:1130-host ... is not allowed to connect to this MySQL server的解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • MySQL中json字段的操作方法

    MySQL中json字段的操作方法

    这篇文章主要介绍了MySQL中json字段的操作方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • MySQL查看数据库、表和索引的容量大小的方法

    MySQL查看数据库、表和索引的容量大小的方法

    在我们平时工作中,如果一个业务运行很久了,可能会需要我们去看看这块业务产生的数据量有多大,比如这个业务所使用的数据库存储空间都使用了多少个G了,哪一张数据表才是大表,下面整理了一些可以拿来即用的SQL以供小伙伴们参考,需要的朋友可以参考下
    2025-09-09
  • MySQL分支和循环结构方式

    MySQL分支和循环结构方式

    在MySQL中,IF函数用于根据条件返回不同的值,类似于Java的三目运算符,CASE语句则提供了两种形式:简单CASE函数和搜索CASE函数,分别类似于Java中的switch-case结构和多重if判断,这些控制流函数在数据库查询和数据处理中非常有用,可以实现复杂的逻辑判断
    2024-10-10
  • 总结12个MySQL慢查询的原因分析

    总结12个MySQL慢查询的原因分析

    这篇文章主要介绍了总结12个MySQL慢查询的原因分析,慢查询,都是因为没有加索引。如果没有加索引的话,会导致全表扫描的,更多相关内容需要的朋友可以参考一下
    2022-08-08
  • 8个MySQL常见的新手SQL错误用法详解

    8个MySQL常见的新手SQL错误用法详解

    在MySQL学习和开发的过程中,新手很容易写出能跑但有问题的SQL,本文整理了8种最常见的新手SQL错误用法,每种错误都配详细的错误示例,危害分析,正确写法和避坑指南,帮助大家从入门开始就养成良好的SQL习惯
    2026-03-03

最新评论