mysql dual 虚拟表实现数据不重复插入

2024-04-22 23:58

本文主要是介绍mysql dual 虚拟表实现数据不重复插入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://m.blog.csdn.net/fgx_123456/article/details/77853547

看这条 sql:select sysdate(); 熟悉不!?虽然我不是很熟悉,但我确定我用过它,其实他是:select sysdate() from dual 的简写。

 

看一下mysql官方对这个表的解释吧(http://dev.mysql.com/doc/refman/5.0/en/select.html):

 

DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL may ignore the clauses.

 MySQL 

does not require FROM DUAL if no tables are referenced.

官方的解释说:纯粹是为了满足select … from…这一习惯问题,mysql会忽略对该表的引用。

 

碰到了新问题就去网上搜集了一下,发现原来 dual 表的应用地方还不少。。。把我发现的三个应用地方都加上:

 

select express from dual #这条 sql 就类似上面的查看系统时间一样。把 express 替换成表达式或函数就行;

 

select express from dual where condition #这条 sql 只是对上面的一点扩展 加上一个 where 条件。其实这个 where 条件跟我们平时使用的 where 条件没什么区别。执行的时候

 

也是先判断 where 子句是否成立,满足然后再执行 select 中的 express,最后返回 express 执行的值;如果 where 子句不成立,则返回空。比如:select 1+1 from where

 

 1=1,将返回 2 ;

 

第三个就是一条比较实用的 SQL 语句了!你否想过:插入数据时先判断一下这条 记录是否已存在这个问题!?也许很多时候为了解决这个问题,你会先 select 一下,根据他的

结果再决定是否继续写入数据库。但是用 dual 这个表,可以让你仅一条 SQL 就可以解决这个问题哦!

 

SQL 就是这样写的:

 

INSERT INTO table (primarykey, field1, field2, ...)

 

SELECT key, value1, value2, ...

 

FROM dual

 

WHERE not exists (select * from table where primarykey = key);

 

来个实际点的例子吧

 

INSERT INTO clients  (client_id, client_name, client_type)  


SELECT 10345, ’IBM’, ’advertising’  


FROM dual 


WHERE not exists (select * from clients  where clients.client_id = 10345);  

再来一个
  
insert into cdb_shop  (uid,shop) 

SELECT '2021','202298' 

from dual 

where not exists(SELECT * FROM cdb_shop WHERE uid = '2021'); 

“SELECT '2021','202298' ”就是values语句的变种,格式就这亲样写就对了。注意值的顺序要与inert语句中列的顺序相对应。

关键的地方是where语句,它的结果决定了是否执行insert语句。

这篇关于mysql dual 虚拟表实现数据不重复插入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927225

相关文章

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.