更新时间:2024-11-11 GMT+08:00

DCL

表1 DCL语法兼容介绍

序号

概述

详细语法说明

差异

1

SET NAMES指定COLLATE字句

SET [ SESSION | LOCAL ] NAMES {'charset_name' [COLLATE 'collation_name'] | DEFAULT};

GaussDB中SQL_ASCII库下暂不支持指定charset_name与数据库字符集不同。具体请参考《M-Compatibility开发指南》中“SQL参考 > SQL语法 > SQL语句 > S > SET ”章节。

不指定字符集时,MySQL会报错但GaussDB不报错。

2

支持DESCRIBE语句

{DESCRIBE | DESC}

tbl_name [col_name | wild]

  • 用户权限验证与MySQL存在差异。
    • GaussDB中需要拥有指定表所在Schema的USAGE权限,同时还需要拥有指定表的任意表级权限或列级权限,仅显示拥有SELECT、INSERT、UPDATE、REFERENCES和COMMENT权限的列信息。
    • MySQL中需要拥有指定表的任意表级权限或列级权限,仅显示拥有SELECT、INSERT、UPDATE、REFERENCES和COMMENT权限的列信息。
  • 模糊匹配时涉及到字符串比较操作时,Field字段使用字符集utf8mb4、字符序utf8mb4_general_ci。

3

START TRANSACTION 支持开启一致性读快照

START TRANSACTION

[

{

ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ }

| { READ WRITE | READ ONLY } | WITH CONSISTENT SNAPSHOT

} [, ...]

];

  • 在MySQL中,可重复读隔离级别下的事务,只有在执行第一个SELECT语句后才开始快照读。在GaussDB中,事务一旦开启,不仅第一个SELECT语句会进行快照读,第一个执行的DDL、DML或DCL语句也会建立事务的一致性读快照
  • GaussDB的START TRANSACTION支持设置多次隔离级别/事务访问模式/开启一致性快照,覆盖生效。

4

SET设置用户变量

SET @var_name := expr

  • MySQL用户变量名支持使用转义字符或双重引号转义,GaussDB用户变量名不支持。

    单引号括起的变量名,变量名不能出现单引号,如@'''、@''''、@'\''不支持,解析时匹配不到'或解析报错,如:

    -- 解析报错
    db_mysql=# SET @'''' = 1;
    ERROR:  syntax error at or near "@"
    LINE 1: SET @'''' = 1;
    
    -- 解析时匹配不到'
    db_mysql=# SET @'\'' = 1;
    db_mysql'#

    双引号括起的变量名,变量名不能出现双引号,如@"""、@""""、@"\""不支持,解析时匹配不到"或解析报错,如:

    -- 解析报错
    db_mysql=# SET @"""" = 1;
    ERROR:  syntax error at or near "@"
    LINE 1: SET @"""" = 1;
    
    -- 解析时匹配不到"
    db_mysql=# SET @"\"" = 1;
    db_mysql"#

    反引号括起的变量名,变量名不能出现反引号,如@```、@````、@`\``不支持,解析时匹配不到`或解析报错,如:

    -- 解析报错
    db_mysql=# SET @```` = 1;
    ERROR:  syntax error at or near "@"
    LINE 1: SET @```` = 1;
    
    -- 解析时匹配不到`
    db_mysql=# SET @`\`` = 1;
    db_mysql`#
  • 形如set @var_name1 = @var_name2 := @var_name3 = @var_name4 := expr; 连续赋值,MySQL支持,GaussDB不支持。
    db_mysql=# set @a := @b := @c = @d := 1;
    ERROR:  user_defined variables cannot be set, such as @var_name := expr is not supported.
  • expr在GaussDB中可以为聚集函数,在MySQL中不支持。

5

SET设置系统参数

SET [ SESSION | @@SESSION. | @@ | LOCAL | @@LOCAL.] {config_parameter { TO | = } { expr | DEFAULT } | FROM CURRENT }};

  • config_parameter为BOOLEAN类型系统参数时:
    • 参数值直接设置为字符串形式的'1'/'0'、'true'/'false'时,M-Compatibility设置成功,MySQL设置失败。
    • 参数值设置为子查询的查询结果,当查询结果为'true'/'false'、非整数类型1/0时,M-Compatibility设置成功,MySQL设置失败;当查询结果为NULL时,M-Compatibility设置失败,MySQL设置成功。