在mysql上使用存储过程给相应的表加入字段

在mysql上使用存储过程给相应的表加入字段

程序升级需要给mysql的数据库加上特定字段以供升级需要

环境

  • mysql5.5
  • 数据库名 thams
  • 需要修改的数据库表名 %_document (模糊查询出来的)
  • 新增字段 expireyear

存储过程代码

CREATE PROCEDURE thams.adds()  
BEGIN
#定义变量
DECLARE _tableName VARCHAR(32);
DECLARE _done INT DEFAULT 0;   
#将查询的结果赋予变量cur 
DECLARE _cur CURSOR FOR 
        SELECT  table_name FROM information_schema.`COLUMNS`  WHERE TABLE_SCHEMA='thams' AND TABLE_NAME  LIKE '%_document' group by TABLE_NAME ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _done=1;#错误定义,标记循环结束
#打开光标cur  
OPEN _cur;
#有条件控制的循环语句。当满足特定条件UNTIL时,就会跳出循环语句
    REPEAT
#使用光标
        FETCH _cur INTO _tableName;
        IF NOT _done THEN
                BEGIN            
                    IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema = 'thams'  AND table_name = _tableName AND column_name = 'expireyear') THEN
                            SET @STMT := CONCAT("ALTER TABLE ",_tableName," ADD COLUMN expireyear VARCHAR(30);");
                            PREPARE STMT FROM @STMT;
                            EXECUTE STMT;
                            #ALTER TABLE _tableName ADD COLUMN PROJECT_ID  VARCHAR(32);
                    END IF; 
                END;
        END IF;
    UNTIL _done END REPEAT;
#关闭光标
CLOSE _cur;
SET _done = 0;#只有定义为0,新的循环才能继续。
 END;
 CALL  thams.adds();  
### 使用 MySQL 存储过程更新不同字段的数据 存储过程是一种数据库对象,它允许封装复杂的业务逻辑并提高应用程序性能。通过创建存储过程可以简化重复性的操作,并提供更好的维护性和安全性。 #### 创建用于更新字段存储过程 为了展示如何使用存储过程来更新不同字段的数据,下面是一个简单的例子: 假设有一个名为 `employees` 的,其中包含员工的信息,如姓名 (`name`) 和职位 (`position`) 等字段。现在要创建一个存储过程来更新这些字段中的任意一个或多个。 ```sql DELIMITER $$ CREATE PROCEDURE UpdateEmployeeInfo( IN p_employee_id INT, IN p_name VARCHAR(100), IN p_position VARCHAR(50) ) BEGIN UPDATE employees SET name = IF(p_name IS NOT NULL, p_name, name), position = IF(p_position IS NOT NULL, p_position, position) WHERE id = p_employee_id; END$$ DELIMITER ; ``` 此存储过程中定义了三个参数:`p_employee_id`, `p_name` 和 `p_position`. 这些参数分别对应于想要修改的具体记录 ID 及其新的名称和职位值。如果某个输入参数为空,则不会更改对应的列[^2]。 当调用这个存储过程时,可以根据实际需求传递相应的参数来进行部分或全部字段的更新。例如: ```sql CALL UpdateEmployeeInfo(1, 'John Doe', NULL); -- 或者 CALL UpdateEmployeeInfo(2, NULL, 'Manager'); ``` 上述命令会分别为具有特定ID的员工设置新名字或将他们的职位更改为经理,而其他未指定的属性保持不变。 对于更加复杂的情况,比如需要根据不同条件动态决定哪些字段应该被更新,可以在存储过程加入更多的控制结构(如IF语句),从而实现更为灵活的功能[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值