`

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唯一索引重复插入数据解决方案总结.docx

    MySQL 唯一索引重复插入数据解决方案总结 MySQL 唯一索引重复插入数据解决方案总结是指在 MySQL 中遇到唯一索引重复插入数据时的解决方案。这种情况下,MySQL 会报一个 Duplicate entry 的错误信息,表示不能在索引...

    MySQL使用UNIQUE实现数据不重复插入

    ON DUPLICATE KEY UPDATE`语句来实现“记录不存在则插入,存在则更新”的逻辑,这对于批量导入数据或维护数据的一致性非常有用。它简化了处理重复数据的流程,确保数据始终保持最新状态,而无需先查询是否存在相同...

    shell脚本实现mysql从原表到历史表数据迁移

    这里我们关注的是使用Shell脚本来实现MySQL从原表到历史表的数据迁移。这种自动化的方法可以帮助我们高效、准确地处理大量数据,同时减少人为错误。 首先,让我们深入理解`shell`脚本。Shell是Linux和Unix系统中的...

    MySQL创建存储过程批量插入10万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    MySQL实现两张表数据的同步

    mysql通过触发器实现两个表的同步,需要了解的朋友可以看一下。 有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录。两张表的结构不同,需要将...

    45-MySQL单表2000万数据查询慢解决方案1

    我们可以按照分区的原则,向表里插入数据。每个分区有4条数据,查询结果正确。 分区删除 我们可以使用命令`alter table tuser drop partition p1;`删除第一个分区,分区内的数据也将被删除。 新建分区 我们可以...

    mysql大批量数据插入

    MySQL 提供了多种方法来实现大批量数据插入,包括使用批量插入语句、使用 LOAD DATA 语句、使用 MySQL 的 Bulk Insert 机制等。 在 MySQL 中,使用批量插入语句可以大大提高数据插入的速度。批量插入语句的格式如下...

    全球主要国家数据表mysql

    location.sql文件可能包含了创建数据库表的SQL语句,以及可能的数据插入语句,用于一次性导入所有国家的数据到MySQL数据库中。开发者可以通过运行这个SQL文件来快速地在他们的环境中设置好这个全球国家数据表。 在...

    MySQL 多表关联一对多查询实现取最新一条数据的方法示例

    本文实例讲述了MySQL 多表关联一对多查询实现取最新一条数据的方法。分享给大家供大家参考,具体如下: MySQL 多表关联一对多查询取最新的一条数据 遇到的问题 多表关联一对多查询取最新的一条数据,数据出现重复 ...

    跨服务器增量同步mysql表数据的shell实现

    这个脚本实现了跨服务器增量同步mysql数据的功能,可以同步多个表。 在使用这个脚本的时候需要注意有修改的地方就是源表配置、目标表配置需要修改成自己的服务器和登录mysql数据库的用户名和密码。基础配置中需要...

    Java 实现从Excel批量导入数据到MySQL

    6. **执行SQL**:使用`Statement`或`PreparedStatement`执行SQL语句,批量插入数据。为提高效率,可以使用批处理(batch processing),将多条SQL语句打包一起执行。 7. **错误处理**:在执行过程中捕获并处理可能...

    mysql数据库实验报告 数据表的操作

    1. 插入数据:使用`INSERT INTO`命令将数据插入到表中。 2. 删除数据:使用`DELETE FROM`命令删除满足特定条件的记录。 3. 修改数据:使用`UPDATE`命令更新表中已存在的记录。 五、表联系的创建与修改 1. 多对多...

    mysql 批量插入测试数据

    mysql 批量插入测试数据 ,可判断条件插入数据,随心所遇插入,do where 循环

    mysql 从一个表中查数据并插入另一个表实现方法

    在数据库管理中,经常需要进行数据迁移或者复制操作,特别是在MySQL这样的关系型数据库中,从一个表中查询数据并插入到另一个表是常见的数据处理任务。本篇文章将详细介绍如何使用SQL语句来实现这一过程。 首先,...

    利用Flume将MySQL表数据准实时抽取到HDFS、MySQL、Kafka

    可能包含了创建表、插入数据或者更新表结构的语句。 综上所述,这个流程实现了一个数据实时流动的架构,从MySQL数据库中抽取数据,然后将数据同时发送到HDFS进行长期存储,以及通过Kafka进行实时处理和分发。这种...

    Python3 操作 MySQL 插入一条数据并返回主键 id的实例

    在Python3中操作MySQL数据库并插入一条数据,然后获取并返回这条...通过上述步骤,可以完整地实现使用Python3插入MySQL数据库数据并获取插入数据的主键id的功能,这对于数据库编程和数据管理都是非常重要的操作技能。

    MySQL中如何处理重复数据(Duplicate)?

    在使用上述方法处理重复数据时,需要在表中定义相应的唯一键(主键或唯一索引),以便 MySQL 能够判断冲突并执行相应的操作。否则,MySQL 将无法判断冲突,导致数据插入失败。 四、应用场景 处理重复数据的方法在...

    SpringBoot定时任务实现Oracle和mysql数据同步

    5. **插入数据**:在MySQL数据库中,创建相应的表结构,然后使用`PreparedStatement`执行插入操作。如果需要批量插入,可以考虑使用`batchUpdate()`方法。 6. **错误处理**:在整个过程中,一定要捕获并处理可能...

    mysql优化小技巧之去除重复项实现方法分析【百万级数据】

    本文实例讲述了mysql优化小技巧之去除重复项实现方法。分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了...

Global site tag (gtag.js) - Google Analytics