mysql中dual表 |
您所在的位置:网站首页 › mysql类似数据库 › mysql中dual表 |
1.楔子
今日在某项目数据库中发现每个库底下都有这样一张表,如下图所示: 因为早期的mysql中是没有DUAL表的,应该是5.1之前。于是为了实现dual表的效果,就创建了上面的只有一条记录的Dual表来模拟。效果类似于后来系统自带的DUAL表。为了测试新建如下的表: create table `T_Sinosun_Dual` ( `DualId` int(11) not null comment '默认ID', `DualName` varchar(20) not null comment '默认名字', `SysCtime` timestamp not null default current_timestamp comment '系统创建时间', `SysUtime` timestamp not null default current_timestamp on update current_timestamp comment '系统修改时间', `SysValid` tinyint(4) not null default '1' comment '系统有效状态', primary key (`DualId`) ) engine=innoDB default charset=utf8 comment='dual表'; insert into `T_Sinosun_Dual`(`DualId`, `DualName`) select 1 , 'daul';
在Mysql和SQL Server中可以直接select 1不需要加from 表名就可以执行 ,而在Oracle中要满足select from的结构: select 1不能实现满足上述结构,于是Oracle引入dual虚拟表来满足结构。 Oracle这样表示:select 1 from dual 现在一般线上使用的MySQL都是5.5以上的,在mysql里也存在和oracle里类似的dual虚拟表:官方声明纯粹是为了满足select ... from...这一习惯问题,mysql会忽略对该表的引用。在mysql中Dual表的使用示例如下: ![]() ![]() 用户希望在插入数据库表以前,先判断数据是否已存在,不存在插入,存在不插入,如何实现: create table `Test` ( `Id` int(11) not null comment '默认ID', `Name` varchar(20) not null comment '默认名字', primary key (`Id`) ) engine=innoDB default charset=utf8 comment='test'; insert into `Test`(`Id`, `Name`) select 1 , 'jack'; insert into `Test` select 1 ,'cao'; insert into `Test` select 1 , 'cao' where not exists(select 1 from Test where id=1); insert into `Test` select 1 , 'cao' from dual where not exists(select 1 from Test where id=1);mysql是支持Dual的,没有必要自作聪明搞个T_SInosun_Dual来模拟,没有用而且增加复杂度,完全是画蛇添足。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |