MySQL里面的dual

本文探讨了MySQL中DUAL表的独特性质,解释其作为Oracle兼容性元素的角色,以及为何在MySQL内部它被视为一种虚拟存在。文章深入分析了尝试访问或创建名为DUAL的表时遇到的限制和错误,同时揭示了MySQL对DUAL表的定制逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是学习笔记的第 1814篇文章

MySQL里面的dual算是一个特殊的存在,如果接触过Oracle的同学会很熟悉。因为语法习惯和完整性的原因会更倾向于使用这种方式。

和Oracle大不同的是,MySQL里面的这个dual是一种更虚的表,在数据字典中无法查证。

mysql> select *from tables where table_name='DUAL';

Empty set (0.00 sec)

mysql> select *from tables where table_name='dual';

Empty set (0.00 sec)

而且不提供对外访问的数据接口。

mysql> desc dual;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dual' at line 1

mysql> select *from dual;

ERROR 1096 (HY000): No tables used

mysql> 

在MySQL代码中有着这样的注释,可以看到是为了兼容Oracle的语法,最后饶有兴趣的用了一个嗯来默认。

        | FROM DUAL_SYM where_clause opt_limit_clause

          /* oracle compatibility: oracle always requires FROM clause,

             and DUAL is system table without fields.

             Is "SELECT 1 FROM DUAL" any better than "SELECT 1" ?

          Hmmm :) */

 除此之外dual对于我们还有什么特别之处。

dual在MySQL里面是保留字,所以我们要建一个表是dual也是不行的。

640?wx_fmt=png

mysql> create table dual(id int);

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'dual(id int)' at line 1

mysql> 

mysql> create table duals1(id int);

Query OK, 0 rows affected (0.14 sec)

在代码中还看到了这样一个针对dual的定制逻辑,对于select xx from where 2的方式,MySQL专门做了定制处理。

mysql> SELECT 1 FROM DUAL WHERE 2;

+---+

| 1 |

+---+

| 1 |

+---+

1 row in set (0.00 sec)

640?wx_fmt=png

所以在大家的使用中,对于dual是一种什么态度呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jeanron100

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值