[转]mysql dual虚拟表
From : http://thobian.info/?p=1035
虚拟表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表的应用地方还不少。。。把我发现的三个应用地方都加上:
- 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 = id);
下面是我测试时的结果图,附上:

当然,好奇的你肯定想到了,这个dual表到底是个什么东西、它里面到底放着什么!是不想是用:select * from `dual`; 和 show create table `dual` 查看一下他的记录。答案我告诉你把,这两条sql都会返回错误!错误??对,确实都会返回错误,这可能就是为什么叫他虚拟表的原因吧!
ok,over 这就是今天学到一点小东西,给大家分享完了。。。。
[转]mysql dual虚拟表的更多相关文章
- MySQL☞dual虚拟表
Dual表:虚拟表,专门用来测试各种函数:(本来以为跟Oracle中的dual表一样,发现还是不太一样)
- MySql类似Oracle的dual虚拟表
在mysql里也存在和oracle里类似的dual虚拟表:官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用. 你可千万注意了: select * f ...
- 【Oracle】虚拟表Dual
Dual是个虚拟表,用来构成SELECT语句的语法规则,Oracle保证Dual里面永远只有一条记录.可以用它来做很多事情,例如,查看当前用户:用来调用系统函数:得到序列的下一个值或者当前值:可以用作 ...
- Oracle中使用虚拟表DUAL或XMLTABLE返回顺序数列
在Oracle中使用虚拟表DUAL或XMLTABLE返回顺序数列 使用DUAL表和CONNECT BY LEVEL的特殊用法,返回一个1-10的顺序数列,示例代码如下: SELECT LEVEL FR ...
- mysql 数据操作 多表查询 子查询 虚拟表介绍
子查询 把一个sql语句放在括号里 ,这个括号里sql语句查询结果其实就是一张表,并且是一个临时在内存里存在的虚拟表 可以用括号把一个查询sql语句括起来 得到查询的结果并且用as 为这张虚拟表起个别 ...
- MySQL之单表查询
一.关键字的执行优先级 1,from:找到表 2,where:拿着where指定的约束条件,去文件/表中取出一条条数据 3,group by:将取出的一条条数据进行分组,如果没有group by,则整 ...
- Mysql数据库单表查询
1.单表查询语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法 select * from,这个sel ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
随机推荐
- 纯css滚动视差
1.何为滚动视差 视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验. 作为网页设计的热点趋势,越来越多的网站应用了这项技术.效 ...
- 模拟POST、Get 请求的工具----APIpost(中文版POSTMAN)
模拟POST.Get 请求的工具----APIpost(中文版POSTMAN) 快速生成.一键导出api文档 在线模拟调试,结果实时返回 模拟登录后请求API 支持团队协作 官网:https://ww ...
- Unity3D导入MAX文件的一些问题(zz)
1.轴向偏转 MAX模型导入Unity3D后,X轴会自动偏转-90度.是因为Unity3D采用的是左手坐标系,而3DMax采用的是右手坐标系.无奈啊,这是很多游戏引擎跟Max结合后都会产生的问题.兼容 ...
- mysql三大特性、三范式、五大约束
1.数据库的三大特性 '实体':表 '属性':表中的数据(字段) '关系':表与表之间的关系 2.数据库设计三大范式 a:确保每列保持原子性(即数据库表中的所有字段值是不可分解的原子值) b:确保表中 ...
- HDU 4750 Count The Pairs (2013南京网络赛1003题,并查集)
Count The Pairs Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- JTAG - General description of the TAP Controller states
A transition between the states only occurs on the rising edge of TCK, and each state has a differen ...
- delphi TOnFormVisibleChangeEvent 事件应用
TGQIFileMgrForm = class(TForm) 定义 property OnVisibleChange: TOnFormVisibleChangeEvent read FOnVisibl ...
- linux 学习之路(学linux必看)
很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...
- 阅读Linux内核源码时建立tags索引
比如在阅读arm架构的Linux内核代码时想建立arm架构相关的索引,可以使用下面的命令: make ARCH=arm tags
- 基于设备树的TQ2440 DMA学习(2)—— 简单的DMA传输
作者 彭东林 pengdonglin137@163.com 平台 TQ2440 Linux-4.9 概述 上一篇博客分析了DMA控制器的寄存器,循序渐进,下面我们直接操作DMA控制器的寄存器实 ...