日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql存储过程遍历新增_MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段...

發布時間:2025/4/5 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql存储过程遍历新增_MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載: https://blog.csdn.net/weixin_42159024/article/details/81488788

實現功能:

升級數據庫。通過遍歷所有數據庫,對每個數據庫進行升級,通過新建表、字段升級。這里主要通過數據庫名.表名來實現在同一個存儲過程中切換不同數據庫。

drop procedure if exists addColumn;

drop procedure if exists updateDataBase;

delimiter $$;

--創建存儲過程:新增字段,傳入參數:數據庫名、表名、字段名、字段類型(int、VARCHAR...)

create procedure 'addColumn'(in dataName VARCHAR(100),in tableName VARCHAR(100),in columnName VARCHAR(100),in columnType VARCHAR(100))

BEGIN

DECLARE column_num int;

set @sqlstr=concat("select count(*) into @column_num from information_schema.columns where table_schema='",dataName,"' and table_name='",tableName,"' and column_name='",columnName,"'");

PREPARE sqlstr FROM @sqlstr;

EXECUTE sqlstr;

if @column_num=0 then

set @sqlstr=concat("alter table ",dataName,".",tableName," add column ",columnName,columnType);

PREPARE sqlstr FROM @sqlstr;

EXECUTE sqlstr;

end if;

END

$$

delimiter$$;

--創建存儲過程:更新數據庫,通過創建表及字段來升級數據庫

drop procedure if exists updateDataBase;

delimiter$$;

create procedure 'updateDataBase'()

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT ''

BEGIN

DECLARE dataName VARCHAR(100);

DECLARE s int DEFAULT 0;

--將以ticket_開頭的數據庫遍歷

DECLARE consume CURSOR FOR select distinct table_schema as dataName from information_schema.'TABLES' where table_schema like 'ticket_%';

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;

OPEN consume;

FETCH consume into dataName;

while s<>1 DO

call addColumn(dataName,'tbl_dc_neinfo','isPassed',' varchar(128) DEFAULT NULL');--調用存儲過程,在表tbl_dc_neinfo中新建字段isPassed varchar(128) DEFAULT NULL

--新建表,在不同的數據庫中

set @sql_create_table=concat(

"CREATE TABLE IF NOT EXISTS ",dataName,"tbl_dc_neinfo",

"(

'OID' bigint(20) NOT NULL AUTO_INCREMENT,

'字段2' 類型,

PRIMARY KEY('OID')

)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");

PREPARE sql_create_table FROM @sql_create_table;

EXECUTE sql_create_table;

FETCH consume INTO dataName;

end WHILE;

CLOSE consume;

END

$$;

delimiter$$;

call updateDataBase();

drop procedure if exists updateDataBase;

drop procedure if exists addColumn;

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的mysql存储过程遍历新增_MySQL存储过程:内部调用存储过程、存储过程实现遍历数据库建表以及修改字段...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。