mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入

news2024/12/29 10:15:47

在这里插入图片描述

文章目录

  • 背景说明

背景说明

我这里主要针对2处地方要进行增量执行sql:

  • 1.新功能需要创建一张新表结构indicator_alarm_threshold
  • 2.给菜单表和另一个表新增数据

我们现在使用的是项目启动先初始化加载init-table.sql的脚本(这里面的轻易不动了,保持原结构数据),然后还有个用于后续迭代升级的增量脚本sql,当然我们没有使用flayway技术,使用的是python安装脚本解析读取执行的。

表1-sql

-- ----------------------------
-- Table structure for indicator_alarm_threshold
-- ----------------------------
DROP TABLE IF EXISTS `indicator_alarm_threshold`;
CREATE TABLE `indicator_alarm_threshold`  (
          `id` int(11) NOT NULL AUTO_INCREMENT,
          `ne_type_id` int(11) NULL DEFAULT NULL COMMENT '网元类型id',
          `counter_code` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '指标编码,全局唯一,共十位, C->普通指标 K->计算指标 U->自定义指标',
          `upper_limit_of_the_busy_time_threshold` int(11) NULL DEFAULT NULL COMMENT '忙时阈值上限',
          `lower_limit_of_the_busy_time_threshold` int(11) NULL DEFAULT NULL COMMENT '忙时阈值下限',
          `upper_limit_of_the_idel_time_threshold` int(11) NULL DEFAULT NULL COMMENT '闲时阈值上限',
          `lower_limit_of_the_idel_time_threshold` int(11) NULL DEFAULT NULL COMMENT '闲时阈值下限',
          `date_range_begin_time` datetime NULL DEFAULT NULL COMMENT '有效开始日期',
          `date_range_end_time` datetime NULL DEFAULT NULL COMMENT '有效结束日期',
          `create_time` datetime NULL DEFAULT NULL COMMENT '创建日期',
          `update_time` datetime NULL DEFAULT NULL COMMENT '更新日期',
          `active_state` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '激活状态【0:未激活、1:已激活】',
          PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '指标告警阈值表' ROW_FORMAT = Compact;

注意:一定要有DROP TABLE IF EXISTS 判断,否则万一重复执行脚本可能会报错中断安装程序。

(表没有主键,但是想查询没有相同值的时候才进行插入)模板

如果表没有主键,你可以使用 WHERE NOT EXISTS 子查询来在插入数据之前进行条件检查,确保没有相同的值存在。以下是一个示例的 SQL 插入语句:

INSERT INTO your_table (column1, column2, ...)
SELECT 'value1', 'value2', ...
FROM dual
WHERE NOT EXISTS (
    SELECT 1 FROM your_table
    WHERE column1 = 'value1' AND column2 = 'value2'
);

解释说明:
在上述示例中,your_table 是你的表名,column1、column2 等是你想要插入数据的列。'value1''value2' 是对应列的值。

WHERE NOT EXISTS 子查询中,我们检查表中是否存在与要插入的值匹配的记录。如果不存在,就会执行插入操作。

请注意,FROM dual 是一个虚拟表,在这里用于提供插入语句所需的基础查询。你可以根据实际情况替换 'value1'、'value2' 和对应的列名与值。

使用这种方法,只有当表中没有与要插入的值匹配的记录时,才会执行插入操作。否则,不会插入重复的数据。

表2-原始sql长这样

INSERT INTO `t_resource` (`id`, `name`, `reskey`, `url`, `type`, `lvl`, `parent_id`) VALUES ('86', '指标告警阈值', 'alarm_indicatorThreshold', '/alarm/indicatorThreshold', 1, 8, 7);
INSERT INTO `r_role_resource` (`role_id`, `resc_id`) VALUES ('2', '86');
INSERT INTO `r_role_resource` (`role_id`, `resc_id`) VALUES ('111', '86');

表2-按照模板编写后的长这样

INSERT INTO `t_resource` (`id`, `name`, `reskey`, `url`, `type`, `lvl`, `parent_id`)
SELECT '86', '指标告警阈值', 'alarm_indicatorThreshold', '/alarm/indicatorThreshold', 1, 8, 7
FROM dual
WHERE NOT EXISTS (
SELECT 1 FROM t_resource
WHERE id = '86'
 AND name = '指标告警阈值'
 AND reskey = 'alarm_indicatorThreshold'
 AND url = '/alarm/indicatorThreshold'
 AND type = 1
 AND lvl = 8
 AND parent_id = 7
);

INSERT INTO `r_role_resource` (`role_id`, `resc_id`) 
SELECT '2', '86'
FROM dual
WHERE NOT EXISTS (
SELECT 1 FROM r_role_resource
WHERE role_id = '2'
 AND resc_id = '86'
);

INSERT INTO `r_role_resource` (`role_id`, `resc_id`) 
SELECT '111', '86'
FROM dual
WHERE NOT EXISTS (
SELECT * FROM r_role_resource
WHERE role_id = '111'
 AND resc_id = '86'
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器测试的三大挑战及解决方案

目录 跨浏览器测试,为什么重要 跨浏览器测试挑战及其解决方案 自动化挑战大 解决方案:正确选择工具 设施维护负担大 解决方案:选择可靠的云服务 浏览器适配列表太多 解决方案:选择多版本支持的平台 总结: 随着…

关于Nuxt3.6兼容低版本游览器的实战以及可能存在的问题

当我们网站打包上线后,有些问题我们肯定也要考虑在内,兼容性也是其中一个重要的一种,可能会有人说,都2023年了,还在乎那些废弃的游览器干啥,我只能说,错!大错特错! 我们不…

docker方式安装gitlab

一:docker 方式安装gitlab 用docker来安装比较方便简单,包括版本升级也会变得更简单。 1、拉取gitlab镜像 gitlab-ce表示的是社区免费版本 docker pull gitlab/gitlab-ce:latest2、创建映射文件 mkdir -p /data/docker/gitlab/etc mkdir -p /data/do…

虚拟现实(VR)在医疗保健中的5种应用

医疗保健中的VR虚拟现实 虚拟现实的由来已久,18世纪,法国的医生使用布制的分娩模拟器向助产师和外科医生教授医学技术。在20世纪60年代初,医生一边对心肺复苏学员口述心肺复苏的技巧,一边使用一家塑料玩具厂家制造的塑料娃娃现场…

前端开发工程师的自我修养:前端开发工程师必须掌握的 Promise(详解)以及在 Vue3 项目中的实战应用

文章目录 📋前言🎯关于 promise(用于使用 JavaScript 编写的 Windows 应用商店应用)的内容分享🧩promise 究竟是什么?承诺关系 🎯JavaScript Promise🧩认识了解 Promise &#x1f3a…

RK3568平台开发系列讲解(外设篇)HX711调试

🚀返回专栏总目录 文章目录 一、HX711 工作原理二、硬件连接三、驱动四、修改设备树五、测试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将讲解 HX711 模块调试。 一、HX711 工作原理 该部分由应变片与 HX711 模数转换器组成。应变片上的压力变化引起应…

线程基础、线程之间的共享和协作(初篇)

什么是进程和线程? 进程是操作系统进行资源分配的最小单位。资源包括cpu,内存空间,磁盘io等。同一进程里的多个线程共享该进程的全部系统资源。而进程与进程之间是相互独立的。 线程是cpu调度的最小单位,必须依托于进程而存在。…

高斯金字塔的秘密,尺度空间证明的思考

在构建图像尺度空间的过程中,唯一使用的核函数是高斯核,这一点被T Lindeber在文献《Scale-space theory: a basic tool for analyzing structures at different scales》中证明,高斯核是唯一可以产生多尺度空间的核。 相信大家在使用高斯金字…

Linux多线程与fork()函数

4.1多线程中使用进程复制 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<pthread.h> void* fun(void* arg) {for(int i0;i<5;i){printf("fun run pid%d\n",getpid());sleep(1);} } int m…

基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统(可修改为coco 80类目标检测)

●项目名称 基于人工智能与边缘计算Aidlux的鸟类检测驱赶系统&#xff08;可修改为coco 80类目标检测&#xff09; ●项目简介 本项目在Aidlux上部署鸟类检测驱赶系统&#xff0c;通过视觉技术检测到有鸟类时&#xff0c;会进行提示。并可在源码上修改coco 80类目标检测索引直…

554、Vue 3 学习笔记 -【常用Composition API(二)】 2023.06.30

目录 一、常用Composition API1. 拉开序幕的setup2. ref函数3. reactive函数4. Vue3.0中的响应式原理5. reactive对比ref 二、参考链接 一、常用Composition API 1. 拉开序幕的setup &#xff08;1&#xff09;Vue3.0中一个新的配置项&#xff0c;值为一个函数。 &#xff08…

逍遥自在学C语言 | 常见的预定义宏

前言 在C语言中&#xff0c;预定义宏是由编译器提供的一组特殊标识符&#xff0c;可以在程序中直接使用&#xff0c;无需进行额外的定义。 预定义宏可以提供有关源文件、行号、日期、时间和函数名等信息&#xff0c;对于调试和日志记录非常有用。 一、人物简介 第一位闪亮登…

解决Windows联想笔记本打不开文件,鼠标一直转圈圈的问题

在左下角搜索处输入cmd 然后输入以下命令&#xff1a; DISM.exe /Online /Cleanup-image /Scanhealth 回车 等它运行完 再输入&#xff1a; DISM.exe /Online /Cleanup-image /Restorehealth 回车 等它运行完 再输入&#xff1a; sfc /scannow 等它运行完&#xff0…

Python3,如何实现CPU的并行计算,那还不简单,5种方式,这篇就搞定。

多进程实现CPU并行计算 1、引言2、实战2.1 多进程模式2.1.1 定义2.1.2 multiprocessing2.1.3 模式2.1.4 适用场景2.1.4 代码示例 2.2 执行方法2.2.1 多线程并发执行2.2.2 进程池2.2.3 消息队列2.2.4 内存共享2.2.5 异步IO 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;…

神奇的甲方:恰恰是拔高我们最好的机遇!

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

LeetCode 打卡day52--动态规划之子序列问题

一个人的朝圣 — LeetCode打卡第52天 知识总结 Leetcode 300. 最长递增子序列题目说明代码说明 Leetcode 674. 最长连续递增序列题目说明代码说明 Leetcode 718. 最长重复子数组题目说明代码说明 知识总结 今天运用动态规划来解决子序列问题. 子序列 是由数组派生而来的序列&a…

Debezium系列之:深入理解tinyint(n)

Debezium系列之:深入理解tinyint 一、背景二、相关技术博客三、查看表的ddl四、深入理解tinyint(n)五、创建表六、插入数据七、查看topic数据八、总结一、背景 数据库修改了字段类型为tinyint,希望采集的时候能够转化为boolean类型,数据库字段类型如下图所示: 在设置了conv…

机器学习笔记 - Facebook AI Similarity Search(Faiss)简介

一、概述 Facebook AI Similarity Search (Faiss)是高效相似性搜索最受欢迎的轮子之一。给定一组向量,我们可以使用 Faiss 对它们进行索引——然后使用另一个向量(查询向量),我们在索引中搜索最相似的向量。 它包含搜索任何大小的向量集的算法,除非超出RAM的大小。它还包…

Go 语言精进之路——Go语言代码块与作用域理解

文章目录 前言代码块与作用域简介if 条件控制语句的代码块其他控制语句的代码块 前言 如果不深入理解 Go 语言的代码块作用域&#xff0c;程序将产生我们无法理解的行为&#xff0c;比如说在循环中创建 goroutine func, 为什么需要传递参数至 goroutine 内部&#xff0c;否则所…

柠檬精僵尸2023-2024_wb粉丝清道夫比赛博更好用的方法

微博批量移除微博粉丝方法_可视化的界面 多样性选择你要移除清理的粉丝类型 三个按钮就可以搞定了 移除粉丝步骤&#xff1a; 首先打开微博&#xff0c;登陆自己的账号。 找到你想要删除的粉丝&#xff0c;点开他/她的头像&#xff0c;打开他/她的个人主页 如果想要大批量清理…