当前位置:   article > 正文

DM_SQL语言_dmsql是什么

dmsql是什么

一、简介

    DM_SQL 语言符合结构化查询语言 SQL 标准,是标准 SQL 的扩充。它集数据定义、数据查询、数据操纵和数据控制于一体,是一种统一的、综合的关系数据库语言。它功能强大,使用简单方便、容易为用户掌握。
    DM_SQL 语言是一种介于关系代数与关系演算之间的语言,其功能主要包括数据定义、查询、操纵和控制四个方面,通过各种不同的 SQL 语句来实现。按照所实现的功能, DM_SQL语句分为以下几种:
1. 用户、模式、基表、视图、索引、序列、全文索引、存储过程、触发器等数据库对象的定义和删除语句,数据库、用户、基表、视图、索引、全文索引等数据库对象的修改语句;
2. 查询 ( 含全文检索 ) 、插入、删除、修改语句;
3. 数据库安全语句。包括创建角色语句、删除角色语句,授权语句、回收权限语句, 修改登录口令语句,审计设置语句、取消审计设置语句等。
    在嵌入方式中,为了协调 DM_SQL 语言与主语言不同的数据处理方式, DM_SQL 语言引入了游标的概念。因此在嵌入方式下,除了数据查询语句( 一次查询一条记录 ) 外,还有几种与游标有关的语句:
1. 游标的定义、打开、关闭、拨动语句;
2. 游标定位方式的数据修改与删除语句。
游标概念:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。      
游标类型:隐式游标和显式游标。在前面所述的程序中有用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的SELECT语句,游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量中分解出需要的数据,并进行处理。
    为了有效维护数据库的完整性和一致性,支持 DBMS 的并发控制机制, DM_SQL 语言提供了事务的回滚(ROLLBACK) 与提交 (COMMIT) 语句。同时 DM 允许选择实施事务级读一致性,它保证同一事务内的可重复读,为此 DM 提供用户多种手动上锁语句,和设置事务隔离级别语句。

二、数据查询

    数据查询是数据库的核心操作, DM_SQL 语言提供了功能丰富的查询方式,满足实际应用需求。几乎所有的数据库操作均涉及到查询,因此熟练掌握查询语句的使用是数据库从业人员必须掌握的技能。
​​​​​​​查询语句的语法如下:
​​​​​​​
  1. <查询表达式>::=
  2. <simple_select>|
  3. <select_clause> <ORDER BY 子句> <LIMIT 限制条件> <FOR UPDATE 子句>|
  4. <select_clause> <ORDER BY 子句> [<FOR UPDATE 子句>] [<LIMIT 限制条件>]|
  5. <select_clause> <LIMIT 子句> <ORDER BY 子句> [<FOR UPDATE 子句>] |
  6. <select_clause> <FOR UPDATE 子句> [<LIMIT 限制条件>] |
  7. <select_clause> <LIMIT 限制条件>[<FOR UPDATE 子句>]
  8. <simple_select> ::=
  9. <query_exp_with>|
  10. <select_clause> <UNION| EXCEPT | MINUS | INTERSECT > [ALL | DISTINCT |
  11. UNIQUE] [CORRESPONDING [BY (<列名> {,<列名>})]] <select_clause>
  12. <select_clause>::= <simple_select>|
  13. (<查询表达式>)| (<select_clause>) <ORDER BY 子句>::= ORDER [SIBLINGS] BY < order_by_list>
  14. <order_by_list>::= < order_by_item >{,<order_by_item>}
  15. <order_by_item>::= <exp> [ASC | DESC] [NULLS FIRST|LAST]
  16. <exp >::=<无符号整数> | <列说明> | <值表达式> <FOR UPDATE 子句> ::=
  17. FOR READ ONLY|
  18. FOR UPDATE [OF <选择列表>] [NOWAIT | WAIT N | SKIP LOCKED]
  19. <LIMIT 限制条件> ::=<LIMIT 子句>|< ROW_LIMIT 子句>
  20. <LIMIT 子句>::=LIMIT< <记录数> | <<记录数>,<记录数>>| <<记录数> OFFSET <偏移量>> >
  21. <记录数>::=<整数> <偏移量>::=<整数>
  22. < ROW_LIMIT 子句>::= [OFFSET <offset> <ROW | ROWS> ] [<FETCH 说明>]
  23. <FETCH 说明>::= FETCH <FIRST | NEXT> <大小> [PERCENT] < ROW | ROWS > <ONLY| WITH
  24. TIES>
  25. <query_exp_with>::=[<WITH 子句>] SELECT [<HINT 子句>] [ALL | DISTINCT | UNIQUE] [<TOP 子句>] <选择列表>[<bulk_or_single_into_null>] <select_tail>
  26. <选择列表> ::= [[<模式名>.]<基表名> | <视图名> .] * | <值表达式> [[AS] <列别名>]
  27. {,[[<模式名>.]<基表名> | <视图名>.] * | <值表达式> [[AS] <列别名>]}
  28. <WITH 子句> ::= [<WITH FUNCTION 子句>] [WITH CTE 子句] 请参考第 4.4WITH 子句
  29. <HINT 子句> ::=/*+ hint{hint}*/
  30. <TOP 子句>::=
  31. TOP <n> |
  32. <<n1>,<n2>>|
  33. <n> PERCENT|
  34. <n> WITH TIES|
  35. <n> PERCENT WITH TIES
  36. <n>::=整数(>=0
  37. <bulk_or_single_into_null>::=<bulk_or_single_into> <变量名 >{,<变量名>}
  38. <bulk_or_single_into>::= <INTO>| <BULK COLLECT INTO>
  39. <select_tail>::=
  40. <FROM 子句>
  41. [<WHERE 子句>]
  42. [<层次查询子句>]
  43. [<GROUP BY 子句>]
  44. [<HAVING 子句>]
  45. <FROM 子句>::= FROM <表引用>{,<表引用>}
  46. <表引用>::=<普通表>|<连接表> <普通表>::=<普通表 1>|<普通表 2>|<普通表 3>|<ARRAY<数组>>
  47. <普通表 1>::=<对象名> [<SAMPLE 子句>][[AS <别名>] <PIVOT 子句>][[AS <别名>]
  48. <UNPIVOT 子句>] [<闪回查询>] [[AS] <别名>] <普通表 2>::=(<查询表达式>)[[AS <别名>] <PIVOT 子句>][[AS <别名>] <UNPIVOT 子句>]
  49. [<闪回查询>][[AS] <表别名> [<新生列>]]
  50. <普通表 3>::=[<模式名>.]<<基表名>|<视图名>>(<选择列>)[[AS <别名>] <PIVOT 子句>]
  51. [[AS <别名>] <UNPIVOT 子句>] [<闪回查询>] [[AS] <表别名> [<派生列表>]]
  52. <对象名>::=<本地对象> | <索引> | <分区表> <本地对象>::=[<模式名>.]<基表名|视图名> <索引>::=[<模式名>.]<基表名> INDEX <索引名>
  53. <分区表>::=
  54. [<模式名>.]<基表名> PARTITION (<一级分区名>) |
  55. [<模式名>.]<基表名> PARTITION FOR (<表达式>,{<表达式>})| [<模式名>.]<基表名> SUBPARTITION (<子分区名>)|
  56. [<模式名>.]<基表名> SUBPARTITION FOR (<表达式>,{<表达式>}) <选择列>::=<列名>[{,<列名> }]
  57. <派生列表>::=(<列名>[{,<列名>}])
  58. <SAMPLE 子句>::=
  59. SAMPLE(<表达式>) |
  60. SAMPLE(<表达式>) SEED (<表达式>) |
  61. SAMPLE BLOCK(<表达式>) |
  62. SAMPLE BLOCK(<表达式>) SEED (<表达式>)
  63. <闪回查询>::= <闪回查询子句>|<闪回版本查询子句>请参考第 17 章 闪回查询
  64. <闪回查询子句>::=WHEN <TIMESTAMP time_exp> | <TRXID trxid>
  65. <闪回版本查询子句>::=VERSIONS BETWEEN <TIMESTAMP time_exp1 AND time_exp2> |
  66. <TRXID trxid1 AND trxid2>
  67. <连接表>::=[(]<交叉连接>|<限定连接>[)]
  68. <交叉连接>::=<表引用> CROSS JOIN <<普通表>|(<连接表>)> <限定连接>::=<表引用> [<PARTITION BY 子句>] [NATURAL] [<连接类型>] JOIN <<普通
  69. >|(<连接表>)> [<PARTITION BY 子句>]
  70. <连接类型>::=
  71. [<内外连接类型>] INNER| <内外连接类型> [OUTER] <内外连接类型>::=LEFT|RIGHT|FULL
  72. <连接条件>::=<条件匹配>|<列匹配> <条件匹配>::=ON<搜索条件> <列匹配>::=USING(<连接列列名>{, <连接列列名>})
  73. <WHERE 子句> ::=
  74. WHERE <搜索条件>|
  75. < WHERE CURRENT OF 子句>
  76. <搜索条件>::=<逻辑表达式> < WHERE CURRENT OF 子句>::=WHERE CURRENT OF <游标名> <层次查询子句>::=
  77. CONNECT BY [NOCYCLE] <连接条件>[START WITH <起始条件> ] |
  78. START WITH <起始条件> CONNECT BY [NOCYCLE] <连接条件> <连接条件>::=<逻辑表达式> <起始条件>::=<逻辑表达式>
  79. <GROUP BY 子句> ::= GROUP BY <group_by>{,<group_by>}
  80. <group_by>::=<分组项>|<ROLLUP 项>|<CUBE 项>|<GROUPING SETS 项> <分组项>::=<值表达式>
  81. <ROLLUP 项>::=ROLLUP (<分组项>)
  82. <CUBE 项>::=CUBE (<分组项>)
  83. <GROUPING SETS 项>::=GROUPING SETS(<GROUP>{,<GROUP>})
  84. <GROUP>::=
  85. <分组项> | (<分组项>{,<分组项>})|
  86. ()
  87. <HAVING 子句> ::= HAVING <搜索条件>
  88. <PARTITION BY 子句> ::=PARTITION BY (<表列名>{,<表列名>})
  89. <PIVOT 子句> ::= PIVOT [XML] ( (<集函数> {,<集函数>}) <pivot_for_clause> IN
  90. (<pivot_in_clause>) )
  91. <pivot_for_clause> ::=
  92. FOR <列名> |
  93. FOR (<列名>{,<列名>})
  94. <pivot_in_clause> ::=
  95. <表达式> [ [AS] <别名>] {,<表达式> [[AS] <别名>]} | (<表达式>) [ [AS] <别名>] {,(<表达式> )[[AS] <别名>]} |
  96. <select_clause> |
  97. ANY
  98. <UNPIVOT 子句> ::= UNPIVOT [<include_null_clause>](<unpivot_val_col_lst>
  99. <pivot_for_clause> IN (<unpivot_in_clause_low> ))
  100. <include_null_clause> ::=
  101. INCLUDE NULLS |
  102. EXCLUDE NULLS
  103. <unpivot_val_col_lst> ::=
  104. <表达式> | (<表达式>{,<表达式>})
  105. <unpivot_in_clause_low> ::= <unpivot_in_clause>{,<unpivot_in_clause>}
  106. <unpivot_in_clause> ::=
  107. <列名> [AS <别名>] |
  108. (<列名>{,<列名>}) [ AS (<别名>{,<别名>})] |
  109. (<列名>{,<列名>}) AS <别名>

三、外部链接

    外部链接对象( LINK )是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用于建立与远程数据的联系。通过多台数据库主库间的相互通讯,用户可以透明地操作远程数据库的数据,使应用程序看起来只有一个大型数据库。用户远程数据库中的数据请求,都被自动转换为网络请求,并在相应结点上实现相应的操作。用户可以建立一个数据库链接,以说明一个对象在远程数据库中的访问路径。这个链接可以是公用的(数据库中所有用户使用),也可以是私有的(只能被某个用户使用)。
    用户可以通过外部链接对远程数据库的表进行查询和增删改操作,以及本地调用远程的存储过程。
注意

准备两台数据库服务器 A、B(目前只支持同平台,不支持跨平台建数据库连接),均安装了 DM 数据库,网络必须互通。

    两台服务器,其中一个为目的主机 A,另一个为测试机 B;分别在这两台服务器上进入数据库安装目录下的库目录里修改 dm.ini 文件:MAL_INI=1实例名 INSTANCE_NAME 要对应,且配置 dmmal.ini(如无此文件,新建此文件)如下所示:

  1. [mal_inst1]
  2. mal_inst_name = DMSERVER --A的实例名
  3. mal_host = 127.0.0.1 --A的ip
  4. mal_port = 5236
  5. [mal_inst2]
  6. mal_inst_name = DMSERVER2 --B的实例名
  7. mal_host = 127.0.0.1 --B的ip
  8. mal_port = 5237

注意

A 和 B 的实例名不能一样;中文注释部分只是方便解释含义,配置 dmmal.ini 时不必写,以免造成格式问题导致 dmserver 服务无法启动。 两台主机的 dmmal.ini 文件相同。配置成功之后分别重启 dmserver DM 数据库服务。

在主机 A 上建表 test,如下所示:

CREATE TABLE TEST(C1 INT,C2 VARCHAR(20));

在 B 上建立到 A 的数据库链接 LINK01,使用链接进行插入、更新和删除操作。如下所示:

  1. CREATE PUBLIC LINK LINK01 CONNECT WITH SYSDBA IDENTIFIED BY SYSDBA USING '127.0.0.1/5282';
  2. INSERT INTO TEST@LINK01 VALUES(1,'A');
  3. INSERT INTO TEST@LINK01 VALUES(2,'B');
  4. UPDATE TEST@LINK01 SET C2='C' WHERE C1=1;
  5. DELETE FROM TEST@LINK01 WHERE C1=2;
  6. COMMIT;

在 B 上查询 A 服务器上表 test 的数据。如下所示:

select * from TEST@LINK01;

输出结果:

 达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台达梦数据库产品体验站,DM8在线试玩,达梦数据库全系列产品免费下载,官方权威的快速上手文档和产品手册,最活跃的达梦技术社区,面向全行业ISV厂商免费的云适配服务。icon-default.png?t=M85Bhttps://eco.dameng.com/

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/533937
推荐阅读
相关标签
  

闽ICP备14008679号