mysql实现增量语句修改表的字段

本文围绕数据库增量语句展开,指出其要满足幂等操作,MySQL在不建立存储过程/函数时无法直接执行块语句,故以存储过程为例。介绍了实现思路,包括查询条件、执行操作和删除临时变量,还提及增量添加、修改、删除字段的操作,最后总结增量语句写法类似幂等接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 前言

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

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

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

二 实现

1、思路

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

2、实现前提

-- 查询当前库表信息
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(); 

3、增量添加某个字段

-- 删除存储过程
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; 


4、增量修改某个字段

-- 删除存储过程
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; 


5、增量删除某个字段

-- 删除存储过程
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、实例中多次使用存储函数创建和删除,实在是因为块语句无法脱离存储过程/函数执行

3、祝你成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mars'Ares

请我喝杯咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值