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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入

image.png

@[toc]

背景说明

我这里主要针对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'
);
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
7天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
30 9
|
12天前
|
存储 Oracle 关系型数据库
索引在手,查询无忧:MySQL索引简介
MySQL 是一款广泛使用的关系型数据库管理系统,在2024年5月的DB-Engines排名中得分1084,仅次于Oracle。本文介绍MySQL索引的工作原理和类型,包括B+Tree、Hash、Full-text索引,以及主键、唯一、普通索引等,帮助开发者优化查询性能。索引类似于图书馆的分类系统,能快速定位数据行,极大提高检索效率。
44 8
|
15天前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
57 11
|
9天前
|
存储 关系型数据库 MySQL
MySQL主键谁与争锋:MySQL为何钟爱自增主键ID+UUID?
本文深入探讨了在MySQL中使用自增类型主键的优势与局限性。自增主键通过保证数据的有序性和减少索引维护成本,提升了查询和插入性能,简化了数据库管理和维护,并提高了数据一致性。然而,在某些业务场景下,如跨表唯一性需求或分布式系统中,自增主键可能无法满足要求,且存在主键值易预测的安全风险。因此,选择主键类型时需综合考虑业务需求和应用场景。
21 2
|
18天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
71 6
|
26天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
24天前
|
SQL 关系型数据库 MySQL
MySQL 高级(进阶) SQL 语句
MySQL 提供了丰富的高级 SQL 语句功能,能够处理复杂的数据查询和管理需求。通过掌握窗口函数、子查询、联合查询、复杂连接操作和事务处理等高级技术,能够大幅提升数据库操作的效率和灵活性。在实际应用中,合理使用这些高级功能,可以更高效地管理和查询数据,满足多样化的业务需求。
87 3
|
27天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
29天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。

相关产品

  • 云数据库 RDS MySQL 版