mysql增量语句如何修改表的字段

 更新时间:2024年12月23日 08:39:05   作者:Mars'Ares  
本文介绍了如何在MySQL中实现数据库的增量更新,确保多次执行增量语句不会影响最终结果,通过使用存储过程,解决了MySQL无法直接执行块语句的问题,文章详细描述了增量添加、修改和删除某个字段的操作,并总结了增量语句的编写方法,类似于编写幂等接口

前言

1、数据库增量语句:基于现有语句实现增量更新且多次执行增量语句不会影响最终结果。即满足幂等操作。

2、mysql似乎不支持不建立存储过程/函数情况,直接执行块语句。。。这点有些无语

3、本文以存储过程为例。

实现

思路

  • 查询是否满足条件
  • 执行满足条件的操作
  • 删除所有临时变量

实现前提

-- 查询当前库表信息
SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE())

-- 查询当前库某表信息
SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) 
AND TABLE_NAME = '表名'

-- 查询当前库某表某字段信息
SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = (SELECT DATABASE()) 
AND TABLE_NAME = '表名'
AND COLUMN_NAME = '字段名'

	
-- 删除某个表字段(不能有引号)
alter table 表名 drop column 字段名; 
-- 添加某个表字段(不能有引号)
alter table 表名 add 字段名 varchar(128) comment '备注等';
-- 修改某个表字段(不能有引号)
alter table 表名 change 旧字段名 新字段名 varchar(128) comment '备注等';



-- 实现用户变量
SET @变量名='变量值';
SELECT @变量名;

-- 实现条件语句(必须在代码块中)
IF @变量='变量值' THEN 
SELECT @变量名;
END IF;

-- 删除存储函数
DROP PROCEDURE IF EXISTS deptProc; 

-- 创建存储函数
DELIMITER //
CREATE PROCEDURE deptProc() 
BEGIN
SET @变量名='变量值';
SELECT @变量名;
IF @变量='变量值' THEN 
SELECT @变量名;
END IF;
END//
DELIMITER ;

-- 调用存储函数
CALL deptProc(); 

增量添加某个字段

-- 删除存储过程
DROP PROCEDURE IF EXISTS testProc; 

DELIMITER //

-- 创建存储过程
CREATE PROCEDURE testProc() 
BEGIN
    -- 查询条件
	SELECT
		COUNT(*) into @y
	FROM
		information_schema. COLUMNS
	WHERE
        TABLE_SCHEMA = (SELECT DATABASE())
		 AND TABLE_NAME = '表名'
	     AND COLUMN_NAME = '字段名';
    -- 查询条件

    -- 判断存在
    IF @y=0 THEN 
        alter table 表名 add 字段名 varchar(32)  comment '备注等';
    -- ELSEIF alter table 表名 change 字段名 字段名 varchar(32)  comment '备注等';
    END IF;
    -- 判断存在
END

//DELIMITER ;

-- 调用存储过程
CALL testProc(); 

-- 删除存储过程
DROP PROCEDURE IF EXISTS testProc; 

增量修改某个字段

-- 删除存储过程
DROP PROCEDURE IF EXISTS testProc; 

DELIMITER //

-- 创建存储过程
CREATE PROCEDURE testProc() 
BEGIN
    -- 查询条件
	SELECT
		COUNT(*) into @y
	FROM
		information_schema. COLUMNS
	WHERE
        TABLE_SCHEMA = (SELECT DATABASE())
		 AND TABLE_NAME = '表名'
	     AND COLUMN_NAME = '旧字段名';
    -- 查询条件

    -- 判断存在
    IF @y=1 THEN 
        alter table 表名 change 旧字段名 新字段名 varchar(32)  comment '备注等';
    -- ELSEIF @y =0 THEN  alter table 表名 add 新字段名 varchar(32)  comment '备注等';
    END IF;
    -- 判断存在
END

//DELIMITER ;

-- 调用存储过程
CALL testProc(); 

-- 删除存储过程
DROP PROCEDURE IF EXISTS testProc; 

增量删除某个字段

-- 删除存储过程
DROP PROCEDURE IF EXISTS testProc; 

DELIMITER //

-- 创建存储过程
CREATE PROCEDURE testProc() 
BEGIN
    -- 查询条件
	SELECT
		COUNT(*) into @y
	FROM
		information_schema. COLUMNS
	WHERE
        TABLE_SCHEMA = (SELECT DATABASE())
		 AND TABLE_NAME = '表名'
	     AND COLUMN_NAME = '旧字段名';
    -- 查询条件

    -- 判断存在
    IF @y=1 THEN 
        alter table 表名 drop 旧字段名;
    END IF;
    -- 判断存在
END

//DELIMITER ;

-- 调用存储过程
CALL testProc(); 

-- 删除存储过程
DROP PROCEDURE IF EXISTS testProc; 

总结

1、增量语句写法类似于编写幂等接口,实现多次操作结果一致。

2、实例中多次使用存储函数创建和删除,实在是因为块语句无法脱离存储过程/函数执行

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql子查询(单行子查询,多行子查询,多列子查询)

    mysql子查询(单行子查询,多行子查询,多列子查询)

    本文主要介绍了mysql子查询(单行子查询,多行子查询,多列子查询),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • mysql 跨表查询、更新、删除示例

    mysql 跨表查询、更新、删除示例

    这篇文章主要介绍了mysql 跨表查询、更新、删除,需要的朋友可以参考下
    2014-03-03
  • Linux下编译安装Mysql 5.5的简单步骤

    Linux下编译安装Mysql 5.5的简单步骤

    Linux下面因为从MySQL 5.5开始使用cmake来做config了,所以编译安装的会和5.1版本有些区别。不过总体来说还是差别不大
    2015-08-08
  • MySQL实现每天定时12点弹出黑窗口

    MySQL实现每天定时12点弹出黑窗口

    这篇文章主要介绍了MySQL实现每天定时12点弹出黑窗口问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 解决MySQL8.0时区的问题步骤

    解决MySQL8.0时区的问题步骤

    这篇文章主要介绍了解决MySQL8.0时区的问题步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 解决mysql登录报错:mysql:[Warning] Using a password on the command line interface can be insecure.ERROR 10

    解决mysql登录报错:mysql:[Warning] Using a password&

    MySQL root登录失败多因密码错误,解决方法包括:检查密码是否正确,确认对localhost的访问权限,启用并配置密码验证机制,修改my.cnf文件后重启服务,若问题持续,需联系技术支持
    2025-07-07
  • SQL SERVER数据库服务器CPU不能全部利用原因解析

    SQL SERVER数据库服务器CPU不能全部利用原因解析

    这篇文章主要介绍了SQL SERVER数据库服务器CPU不能全部利用原因解析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • 达梦数据库兼容mysql GROUP BY查询的设置方式

    达梦数据库兼容mysql GROUP BY查询的设置方式

    作为一名数据库管理员或开发者,当项目需要从MySQL迁移到达梦数据库时,最关心的莫过于兼容性问题,这篇文章主要介绍了达梦数据库兼容mysql GROUP BY查询的设置方式,需要的朋友可以参考下
    2025-11-11
  • mysql创建表分区的实现示例

    mysql创建表分区的实现示例

    表分区是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分,本文主要介绍了mysql创建表分区的实现示例,感兴趣的可以了解一下
    2024-01-01
  • CentOS下php使用127.0.0.1不能连接mysql的解决方法

    CentOS下php使用127.0.0.1不能连接mysql的解决方法

    这篇文章主要介绍了CentOS下php使用127.0.0.1不能连接mysql的解决方法,本文原因是SELINUX导致的连接失败,需要的朋友可以参考下
    2015-01-01

最新评论