【转载】mysql dual 虚拟表

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:

      虚拟表 dual 其实我是今天第一次听说,虽然以前有过它的应用。说不定你也用过哦,看这条 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 表的应用地方还不少。。。把我发现的三个应用地方都加上:

  1. select express from dual    #这条 sql 就类似上面的查看系统时间一样。把 express 替换成表达式或函数就行;
  2. select express from dual where condition   #这条 sql 只是对上面的一点扩展 加上一个 where 条件。其实这个 where 条件跟我们平时使用的 where 条件没什么区别。执行的时候也是先判断 where 子句是否成立,满足然后再执行 select 中的 express,最后返回 express 执行的值;如果 where 子句不成立,则返回空。比如:select 1+1 from where 1=1,将返回 2 ;
  3. 第三个就是一条比较实用的 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 = id);

    下面是我测试时的结果图,附上:

    mysql dual表测试图片

      当然,好奇的你肯定想到了,这个 dual 表到底是个什么东西、它里面到底放着什么!是不想是用:select * from `dual`; 和 show create table `dual` 查看一下他的记录。答案我告诉你把,这两条 sql都会返回错误!错误??对,确实都会返回错误,这可能就是为什么叫他虚拟表的原因吧!

ok,over 这就是今天学到一点小东西,给大家分享完了。。。。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
安全 关系型数据库 MySQL
【MySQL】表的增删查改
【MySQL】表的增删查改
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
92 1
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
112 0
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
225 3
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
151 1
|
存储 关系型数据库 MySQL
【MySQL】表的约束
【MySQL】表的约束
125 1
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多