更新时间:2025-06-30 GMT+08:00

DCL

表1 DCL语法兼容介绍

概述

详细语法说明

差异

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不报错。

支持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。

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中不支持。

SET设置系统参数

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

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

USE切换当前模式

USE schema_name

使用USE语句指定模式,当用户没有对应模式的USAGE权限时,MySQL产生报错,GaussDB会将当前模式指定为空。
-- MySQL
mysql> USE test;
ERROR 1044 (42000): Access denied for user 'u1'@'%' to database 'test'

-- GaussDB
m_db=> USE test;
SET
m_db=> SELECT database();
ERROR:  function returned NULL
CONTEXT:  referenced column: database