天天看点

【转载】mysql dual 虚拟表

      虚拟表 dual 其实我是今天第一次听说,虽然以前有过它的应用。说不定你也用过哦,看这条 sql:select sysdate(); 熟悉不!?虽然我不是狠熟悉,但我确定我用过它,其实他是:select sysdate() from dual 的简写。

官方的解释说:纯粹是为了满足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 就是这样写的:

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

【转载】mysql dual 虚拟表

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

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