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

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

时间:2024-11-03 19:21:23浏览次数:4  
标签:COMMENT DEFAULT mysql 主键 role sql NULL WHERE id

@

目录

背景说明

我这里主要针对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'
);

标签:COMMENT,DEFAULT,mysql,主键,role,sql,NULL,WHERE,id
From: https://www.cnblogs.com/bigcat26/p/18523807

相关文章

  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现七
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下......
  • 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现八
    一、前言介绍:1.1项目摘要随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势。传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速、便捷需求。这些问题不仅影响了快递服务的效率,也增加了快递员和消费者的不便。在这样的背景下......
  • MySQL学习笔记(基础语法)
    目录前言什么是MySQL数据库介绍1.关系型数据库2.开源3.跨平台支持4.性能与可扩展性5.存储引擎6.安全性7.社区与支持8.应用场景9.兼容性10.工具与接口MySQL基础语法增(INSERT)改(UPDATE)删(DELETE)查(SELECT)前言昨天忘写了,今天补更两篇,一个MySQL数据......
  • 科普文:软件架构数据库系列之【MySQL:innodb buffer pool功能特性及其关键参数】
    一、概述InnoDB的BufferPool是其存储引擎中非常重要的一个组件,它的主要功能是缓存数据和索引页,以减少磁盘I/O操作,从而提高查询性能。科普文:软件架构数据库系列之【MySQL5.7的InnoDB引擎存储结构分析:buffer+disk】_mysql5.7innodb存储引擎架构-CSDN博客科普文:软件架构......
  • PostgreSQL11从入门到精通
    书:pan.baidu.com/s/1IVTI-jQveSb4Cdrio6XkBw?pwd=ijykPostgreSQL11是一个功能强大的开源关系型数据库管理系统,以下是对PostgreSQL11从入门到精通的技术分享:一、PostgreSQL11简介PostgreSQL起源于加利福尼亚的伯克利大学,经历了无数次开发升级,现已成为世界上最先进的开源关......
  • How to Install psql on Mac
    参考链接:Here#firststep➜brewinstalllibpq==>Downloadinghttps://mirrors.ustc.edu.cn/homebrew-bottles/api/formula.jws.json==>Downloadinghttps://mirrors.ustc.edu.cn/homebrew-bottles/api/cask.jws.json==>Fetchingdependencie......
  • 《SQL攻击与预防》上一篇有几个语法错误现更改「前中后英」
             ​—原创本人「YANG」​—排版「ZH」​—注:本文仅供学习参考(转载需联系本人或ZH获取权限)......
  • sql练习专场(一)(6-10)
    第六题:统计每个成绩段人数createtablesql1_6(strstring);loaddatalocalinpath'/home/homedata/sql_1/sql1_6.txt'intotablesql1_6;{"username":"张三","score":95}{"username":"李四","score":76......
  • SQL注入绕过
    WAF介绍一、WAF介绍WAF(WebApplicationFirewall,Web应用防火墙)及与其相关的知识,这里利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为web应用提供保护的一款产品。WAF基本上可以分为以下几类:1.1软件型WAF以软件形式装在所保护的服务......
  • 【Mysql进阶】5步轻松掌握MySQL日志查询,你真的懂了吗?
    ......