达梦数据库的sql语言类型

说实话,第一次接触大盟数据库SQL的分类时,我确实有点困惑。
后来和几个开发同学聊了一下,学会了这四类命令的使用方法。
让我举几个我亲眼所见的例子。

以DQL为例。
我是一家电子商务公司的实习生,他们每天要处理数百张表来报告。
有朋友写了一个DQL查询,使用子查询和GROUP BY,最终计算出每个品类在全国的销售排名。
他告诉我,如果使用标准 WHERE 条件来检查可能需要半天时间,但使用 DQL 并添加 GROUP BY 速度要快得多。
我承认,戴明很好地处理了这样一个复杂的问题。

有趣的是DML。
去年我在一个项目中改变了一次表的结构。
起初我认为删除列会更容易,但我发现使用 ALTER TABLE 比 TRUNCATE 更有效。
当时我用的是TRUNCATE,服务器卡住了十分钟。
后来老板教我,对于大表操作,TRUNCATE是清除数据,而ALTER TABLE是物理删除,所以前者快很多。
大梦和大梦的这个区别是应该考虑到的。

DCL 最让我惊讶的方面是有限的许可证管理会话。
是一个新运维人员犯了GRANT错误,给了普通用户所有表的SELECT权限。
我一看就捏了一把汗,还好老板及时发现,并使用REVOKE恢复了License。
我们团队的内部规则现在要求任何 DCL 命令必须首先在测试环境中运行。

至于动态SQL和嵌入式SQL,我用的不多。
但听后端老张说,他们在做大数据迁移的时候,使用动态SQL来执行SQL脚本,效率惊人。
Dameng和Oracle一样,支持PREPARE命令,可以在运行时解析SQL语句。

然而,虽然 Damming 支持许多功能,但某些用途存在缺陷。
例如,如果子查询太多,筑坝优化器可能会卡住。
我的一个朋友写了一个三级嵌套查询,但是生产环境崩溃了。
后来重写了临时表然后附上,问题就解决了。
我自己没有运行过这个。
我记得数据设置为三级会有问题,不过建议你检查一下。

一般情况下,Damaging SQL功能已经完成,但具体使用哪个命令则视情况而定。
如果你问我是否会在所有情况下使用 DQL,我肯定会说不会。
DML对于大表操作非常有效; License管理为DCL,表结构改为DDL。
你用得越多,你就会变得越好。

达梦数据类型转换异常

说实话,大盟的数据类型转换确实很烦人。
我曾经在更改会计系统中的一个字段时犯了错误,几乎使整个项目陷入停顿。
当时我只是更新了一条记录,写了一个简单的SQL,结果却崩溃了,报“-6 1 1 1 :字符串转换错误”。

说实话,一开始我很困惑,因为代码相当规范,没有明显的类型转换操作。
后来查了一下,发现表中ID字段的实际类型是VARCHAR。
我写SQL的时候直接把它当作数值类型来用。
大萌在执行更新时,会自动在数字中插入字符串“4 9 ”。
当然没用,只是爆炸了。

我当时就赶紧改了,把“where id=4 9 ”改成了“where id='4 9 '”。
嘿嘿,真是说对了。
这件事让我明白了,在搭建大盟数据库的时候,真的不能只凭经验去猜测字段类型。
我有一个习惯,每次接触一个新表,哪怕是一个小项目,都会先看一下DBA视图中的表结构,以避免每次都犯这种低级错误。

有趣的是,我后来在做数据迁移的时候也遇到了类似的情况。
从PostgreSQL迁移到达盟时,出现字段类型不匹配的情况。
PostgreSQL是text类型,但是大萌想要的是varchar类型,所以直接改是不行的。
纠结了半天,终于发现只能删除原来的字段,新建一个字段,然后把数据移到那里。
这提醒我,不同的数据库对于数据类型的实现还是不同的。
迁移的时候,确实要一一走遍各个领域,不能想当然。

关于数据类型,说白了,你得仔细看表结构,不能想当然。
如果你想一想,如果每个项目都基于经验,那么很少有人能够成功。
保持谨慎,避免走弯路。