当前位置: 首页 > wzjs >正文

网站案例英文爱廷玖达泊西汀

网站案例英文,爱廷玖达泊西汀,网站首页地址是什么,内销网站怎么做目录 背景 解决方案 方式一:利用变量拼接好sql,复制出来执行(简单,推荐) 方式二:使用存储过程和游标实现(比较复杂,脚本需要拼接一个完整的,也比较麻烦,不…

目录

背景

解决方案

方式一:利用变量拼接好sql,复制出来执行(简单,推荐)

方式二:使用存储过程和游标实现(比较复杂,脚本需要拼接一个完整的,也比较麻烦,不过好处是自动执行的)


背景

最近在做sass,一家客户(企业)对应一个数据库(同一个链接不同的数据库隔离),遇到的问题是通用的功能模块建表,修改数据库字段等等脚本很不方便,之前的执行方式都是将sql脚本手动拼上schema名

如:

alter table test1.example_table add column age varchar(20) COMMENT '年龄';
alter table test2.example_table add column age varchar(20) COMMENT '年龄';

这种方式在租户很少的情况下觉得没什么工作量,但随着客户越来越多,执行脚本起来就越来越麻烦,不胜其烦,所以想利用脚本生成完整的可执行的sql,这样可以省去很多时间。

解决方案

方式一:利用变量拼接好sql,复制出来执行(简单,推荐)

-- 自定义变量是属于会话级别,无需显示删除,会话结束(关闭链接)自动删除,或者SET @my_var = NULL; 删除-- 根据需要修改过滤条件,主要是查找要执行的目标数据库
SET @schemas = (SELECT GROUP_CONCAT(CONCAT('`', SCHEMA_NAME, '`'))FROM INFORMATION_SCHEMA.SCHEMATAWHERE SCHEMA_NAME LIKE 'test%'  
);-- 你要执行的SQL
SET @sql_to_execute = 'CREATE TABLE example_table (id INT PRIMARY KEY, name VARCHAR(100))';  -- sql拼接
SET @combined_sql = (SELECT GROUP_CONCAT(CONCAT('USE ', schema_name, '; ', @sql_to_execute, ';')SEPARATOR ' ') FROM (SELECT SCHEMA_NAME as schema_nameFROM INFORMATION_SCHEMA.SCHEMATAWHERE SCHEMA_NAME LIKE 'test%') t
);-- 查询变量,结果就是可执行的sql,复制出来执行执行
SELECT @combined_sql;-- 例如:上述打印出来的sqlUSE test;
CREATE TABLE example_table (id INT PRIMARY KEY,
NAME VARCHAR ( 100 ));
USE test2;
CREATE TABLE example_table (id INT PRIMARY KEY,
NAME VARCHAR ( 100 ));
USE test3;
CREATE TABLE example_table (id INT PRIMARY KEY,
NAME VARCHAR ( 100 ));
USE test4;
CREATE TABLE example_table (id INT PRIMARY KEY,
NAME VARCHAR ( 100 ));
USE test5;
CREATE TABLE example_table (
id INT PRIMARY KEY,
NAME VARCHAR ( 100 ));-- 直接打开一个控制台执行即可,非常简单

如果执行的不是一条语句,是一个脚本也是适应的,如:

-- 这里面就包含两个sql,每条必须是可以执行的
SET @sql_to_execute = 'alter table example_table add column age varchar(20) COMMENT ''年龄'';
alter table example_table1 add column age varchar(20) COMMENT ''年龄'';

方式二:使用存储过程和游标实现(比较复杂,脚本需要拼接一个完整的,也比较麻烦,不过好处是自动执行的)

-- 1. 更改分隔符,因为存储过程中包含多个语句,需要使用不同的分隔符
DELIMITER $$-- 2. 创建名为 operate_database 的存储过程
CREATE PROCEDURE operate_database()
BEGIN-- 3. 声明变量 done 用于控制循环,默认为 FALSEDECLARE done INT DEFAULT FALSE;-- 4. 声明变量 db_name 用于存储数据库名称DECLARE db_name VARCHAR(100);-- 5. 声明游标,用于遍历所有以 'test' 开头的数据库DECLARE cur CURSOR FOR SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME LIKE 'test%';-- 6. 声明异常处理,当没有更多记录时设置 done 为 TRUEDECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;-- 7. 打开游标OPEN cur;-- 8. 开始循环处理每个数据库read_loop: LOOP-- 9. 从游标中获取下一个数据库名称FETCH cur INTO db_name;-- 10. 如果没有更多数据库,退出循环IF done THENLEAVE read_loop;END IF;-- 11. 构造创建表的 SQL 语句-- 使用反引号(`)包围数据库名和表名,防止特殊字符和保留字的问题SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS `', db_name, '`.`example_table` (id INT PRIMARY KEY,name VARCHAR(100))');-- 12. 预处理 SQL 语句PREPARE stmt FROM @sql;-- 13. 执行预处理的语句EXECUTE stmt;-- 14. 释放预处理的语句DEALLOCATE PREPARE stmt;END LOOP;-- 15. 关闭游标CLOSE cur;
-- 16. 结束存储过程
END $$-- 17. 将分隔符改回分号
DELIMITER ;-- 18. 调用存储过程
CALL operate_database();-- 19. 验证表是否创建成功
-- 查询 INFORMATION_SCHEMA.TABLES 视图,显示所有创建的表
SELECT TABLE_SCHEMA as database_name,  -- 数据库名TABLE_NAME as table_name,       -- 表名'Table exists' as status        -- 状态信息
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA LIKE 'test%'     -- 筛选以 test 开头的数据库AND TABLE_NAME = 'example_table'; -- 筛选表名为 example_table 的表-- 20. 删除存储过程,清理环境
DROP PROCEDURE IF EXISTS operate_database;

关键概念解释:

  1. DELIMITER $$ - 更改分隔符,使存储过程内的分号不会结束整个语句
  2. DECLARE - 用于声明变量和游标
  3. CURSOR - 用于遍历结果集的数据库对象
  4. HANDLER - 异常处理机制
  5. PREPARE, EXECUTE, DEALLOCATE - 动态SQL执行的三个步骤
  6. CONCAT - 字符串拼接函数
  7. INFORMATION_SCHEMA - MySQL的信息数据库,包含数据库和表的元数据

这种方式如果本身有个sql脚本包含多个sql,拼接起来也比较繁琐

http://www.dtcms.com/wzjs/583449.html

相关文章:

  • 安徽鲲鹏建设集团有限公司网站河北邯郸什么时候解封
  • 网站开发是先给钱还是营销方案总结
  • 网站建设与管理任务分工重庆网站建设seo
  • 个人网站模板素材下载做网站文字编辑工作好不好
  • 比特币网站怎么做后端开发需要学多长时间
  • 网站备案 地域软文营销文章
  • 免费文档模板素材网站电商网站建设 问题与解决方案
  • 福建建设厅网站工程履约保险余姚市建设局网站
  • 南宁模板建站上海做征信服务的公司网站
  • 潍坊网站制作公司备案号在哪里查询
  • iis发布网站乱码国内优秀的个人网站
  • 网站开发属于什么部门国外做的比较的ppt网站有哪些方面
  • python做网站青岛新网站设计公司
  • 网站建设岗位将来有什么发展北京互联网公司大厂有哪些
  • 黄石网站建设黄石三亚专业做网站
  • 网站开发合同模版中企动力为什么一直招人
  • 招一个程序员可以做网站吗打开网站 磁盘空间不足
  • 电商网站开发的背景及意义seo电商运营是什么意思
  • 国家企业信用信息没有网站怎么做杭州清风室内设计学校
  • 杭州网站建设推广wordpress建视频网站
  • 黄山市住房城乡建设厅网站百度百科让做网站的超链接吗
  • 电商网站构建预算方案推广网店的途径和方法
  • 网站开发实用技术相关论文建立有效的()
  • 炫酷的网站开发推广公司合同
  • 做外贸网站进行销售 需要纳税吗做网站需要的软件
  • 多模室内设计网站又拍云WordPress 插件
  • 站点和网站的区别wordpress企业营销模板
  • 内蒙古建设住房与城乡厅官方网站网站设计机构有哪些
  • 珠海网站建设工程石狮市
  • 石家庄网站优化公司酒店网站制作公司