mysql获取视图创建语句与原创建语句不一致

nayi_224 2020-12-31 04:19:27
mysql版本 8.0.20
ide:Navicat15

按下面语句创建视图

create or replace view v_test as
select * from
(select 1 a1 from dual) t1,
(select 1 a2 from dual) t2,
(select 1 a3 from dual) t3,
(select 1 a4 from dual) t4
;

通过系统工具查看创建语句

用默认工具美化之后
SELECT
`t1`.`a1` AS `a1`,
`t2`.`a2` AS `a2`,
`t3`.`a3` AS `a3`,
`t4`.`a4` AS `a4`
FROM
((((
SELECT
1 AS `a1`
) `t1`
JOIN ( SELECT 1 AS `a2` ) `t2`
)
JOIN ( SELECT 1 AS `a3` ) `t3`
)
JOIN ( SELECT 1 AS `a4` ) `t4`)

可以看到mysql一共做了四件事
1.将所有关键字转换为大写
2.将所有非常量加上引号
3.自动更改语句结构至标准语法
4.将语句压缩为一行

这四点我都想取消,分别应该怎么做

最终想要的结果是,创建语句怎么存的,读取的时候就要怎么拿回来
...全文
562 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengangcsdn 2021-01-05
  • 打赏
  • 举报
回复
这个估计改不了,mysql 会自动优化 sql 语句, 不仅仅是视图的语句。 你自己写的视图脚本,不该以数据库中的为准,该以你写的为准哦。并且用版本化工具管理起来。
nayi_224 2021-01-04
  • 打赏
  • 举报
回复
引用 6 楼 尐千叶 的回复:
你把括号去掉就和你那个一样了
语句肯定是等效,但是对于一些复杂语句,这种随意的加括号和改格式可能会让原本简单的语句可读性变差。就像我上面举得例子,这种语句在做汇总统计的时候很常见,我只想把几个统计结果放到一行,用那种简略写法就看得很清晰。加join套层级,想象一下,每个子查询都几十行代码,看着很恶心。 这种随意改结构还可能产生一些bug,比如,将 t1.reference_id = t2.reference_id 改成`t1`.`reference_id` = CONVERT ( `t2`.`reference_id` USING utf8mb4 ) 这个语句放到低版本中执行就会报错
尐千叶 2021-01-04
  • 打赏
  • 举报
回复
你把括号去掉就和你那个一样了
尐千叶 2021-01-04
  • 打赏
  • 举报
回复
加了括号,不影响结果
卖水果的net 2021-01-02
  • 打赏
  • 举报
回复
可以看到mysql一共做了四件事 1.将所有关键字转换为大写 2.将所有非常量加上引号 3.自动更改语句结构至标准语法 4.将语句压缩为一行 第 4 个,应该你这个工具的事儿。 前 3 个,应该改不了,哪个工具创建都会做这个改动。
nayi_224 2020-12-31
  • 打赏
  • 举报
回复
引用 2 楼 老紫竹 的回复:
show create view XXXX。 不要用图形化工具的
一样的,甚至information_schema.views中的信息也是如此
老紫竹 2020-12-31
  • 打赏
  • 举报
回复
show create view XXXX。 不要用图形化工具的

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧