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

在这里插入图片描述

文章目录

背景说明

我这里主要针对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'
);
  屏蔽数据库间的差异,以统一的界面和操作方式来对数据进行处理,将程序员或数据管理员从繁琐的操作模式中解脱出来,使其更加专注的进行Sql语句的编写。   将查询分析器和企业管理器功能合二为一,并融入众多实用功能,并完美支持 sqlserver、oracle、mysql、access。是您编写sql语句和数据分析的绝佳帮手。   功能列:   1、代码高亮:根据操作数据库的不同区分相应关键字,并高亮显示   2、自动完成:输入不同的名等信息,将自动提示相关的字段信息等。   3、智能提示:输入相应关键字将出现类似VS中一样的说明提示。   4、跨库操作:可同时跨多个数据库间操作,互不影响。随时切换,随时运行。   5、随意运行:运行选择的代码、运行多个Sql操作代码。如果运行多个Select语句则显示多个结果集,用来对比查看。(快捷键F5)   6、数据库树中查找对象。   7、在Sql语句编辑器中快速查找功能。   8、查看数据库属*   9、查看结构   10、自动生成Sql语句模板   11、删除、视图等   12、查看数据库属*,并快速定到至物理文件。   13、生成脚本信息功能   14、结果集导出功能。   15、在结构集中查找   16、删除指定的行(快捷键 ‘delete’)   17、修改制定的数据   18、添加新数据   19、复制选择内容(快捷键‘ctrl+C’)   20、将外部数据导入到结果集中(支持txt:以 '|'或tab符号为分割符 和execl: 指定Sheet页名称 和 默认Sheet页 )   21、支持将导入的数据更新至数据库。   22、编辑操作时自动错提示功能(如:自动递增字段自动屏蔽编辑功能。必填字段没有填写内   容则提示,数据类型不正确自动提示等。。。)   23、自动标识主键(主键字段标识为-*-字段名-*-)   24、冻结指定行、列功能。使查看操作更加方便   25、数据集更改后,在提交前可选查看所有更改的部分数据。并用颜**分。   26、自定义我的收藏功能。   27、详细数据单窗体查看功能(支持图片字段)   28、*在没有安装SqlServer 客户端及任何组件的情况下仍然可以连接至SqlServer*   29、*判断Oracle的常见错误,并尝试更改或给出提示*   30、增加历史记录功能。   31、增加自动保存用户状态功能。再次打开软件将会保留上次已连接的数据库信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘大猫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值