本文将参照MySQL官网的语法内容,来说明在租户内执行相关语法时的兼容性信息。
语法兼容性说明
对于使用PolarDB MySQL版高权限用户无法执行的语法,如ALTER INSTANCE、ALTER TABLESPACE等,在多租户模式下也无法执行。在下表中的是否兼容列标注为N,并添加备注信息。
语句的执行结果与租户无关,如SHOW VARIABLES、KILL、SHOW ENGINES等,此类语句在下表中的是否兼容列标注为Y-无区分。
语句的执行结果与租户有关,如SHOW DATABASE、CREATE DATABASE、CREATE USER、ALTER USER等,此类语句在下表中的是否兼容列标注为Y或N,并添加备注信息。
SQL种类 | SQL语法 | 是否兼容 | 备注 |
数据定义语句 | 原子性DDL | Y | |
ALTER DATABASE | Y | ||
ALTER EVENT | Y | ||
ALTER FUNCTION | Y | ||
ALTER INSTANCE | N | 高权限账号无权限执行该语句。 | |
ALTER LOGFILE GROUP | N | 仅在NDB模式下支持使用该语句。 | |
ALTER PROCEDURE | Y | ||
ALTER SERVER | N | 高权限账号无权限执行该语句。 | |
ALTER TABLE | Y | ||
ALTER TABLESPACE | N | 高权限账号无权限执行该语句。 | |
ALTER VIEW | Y | ||
CREATE DATABASE | Y | ||
CREATE EVENT | Y | ||
CREATE FUNCTION | Y | ||
CREATE INDEX | Y | ||
CREATE LOGFILE GROUP | N | 仅在NDB模式下支持使用该语句。 | |
CREATE PROCEDURE CREATE FUNCTION | Y | ||
CREATE SERVER | N | 高权限账号无权限执行该语句。 | |
CREATE SPATIAL REFERENCE SYSTEM | N | 高权限账号无权限执行该语句。 | |
CREATE TABLE | Y | ||
CREATE TABLESPACE | N | 高权限账号无权限执行该语句。 | |
CREATE TRIGGER | Y | ||
CREATE VIEW | Y | ||
DROP DATABASE | Y | ||
DROP EVENT | Y | ||
DROP FUNCTION | Y | ||
DROP INDEX | Y | ||
DROP LOGFILE GROUP | N | 仅在NDB模式下支持使用该语句。 | |
DROP PROCEDURE DROP FUNCTION | Y | ||
DROP SERVER | N | 高权限账号无权限执行该语句。 | |
DROP SPATIAL REFERENCE SYSTEM | N | 高权限账号无权限执行该语句。 | |
DROP TABLE | Y | ||
DROP TABLESPACE | N | 高权限账号无权限执行该语句。 | |
DROP TRIGGER | Y | ||
DROP VIEW | Y | ||
RENAME TABLE | Y | ||
TRUNCATE TABLE | Y | ||
数据操作语句 | CALL | Y | |
DELETE | Y | ||
DO | Y | ||
EXCEPT子句 | N | PolarDB MySQL版802版本不支持使用此语法。 | |
HANDLER | Y | ||
IMPORT TABLE | N | 高权限账号无权限执行该语句。 | |
INSERT | Y | ||
INTERSECT子句 | N | PolarDB MySQL版802版本不支持使用此语法。 | |
LOAD DATA | N | 高权限账号无权限执行该语句,即无权限加载服务器端的文件。 | |
LOAD XML | N | 高权限账号无权限执行该语句,即无权限加载服务器端的文件。 | |
含有括号的表达式 | Y | ||
REPLACE | Y | ||
SELECT | Y | ||
含有UNION、INTERSECT和EXCEPT的SQL语句 | Y | ||
子查询 | Y | ||
TABLE | N | PolarDB MySQL版802版本不支持使用此语法。 | |
UPDATE | Y | ||
UNION子句 | Y | ||
VALUES | N | PolarDB MySQL版802版本不支持使用此语法。 | |
WITH(公共表表达式) | Y | ||
事务和锁定语句 | START TRANSACTION、COMMIT和ROLLBACK语句 | Y-无区分 | |
无法回滚的语句 | Y-无区分 | ||
隐式提交的语句 | Y-无区分 | ||
SAVEPOINT、ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT语句 | Y-无区分 | ||
LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE语句 | N | 高权限账号无权限执行该语句。 | |
LOCK TABLES和UNLOCK TABLES | Y | ||
SET TRANSACTION | Y-无区分 | ||
XA事务 | Y-无区分 | ||
复制语句:用于控制源服务器的SQL语句 | PURGE BINARY LOGS | N | 高权限账号无权限执行该语句。 |
RESET MASTER | Y-无区分 | 仅当租户下的用户拥有reload权限时,支持使用该语句。不建议授予此权限。 | |
SET sql_log_bin | N | 高权限账号无权限执行该语句。 | |
复制语句:用于控制副本服务器的SQL语句。 | CHANGE MASTER TO | N | 高权限账号无权限执行该语句。 |
CHANGE REPLICATION FILTER | N | 高权限账号无权限执行该语句。 | |
CHANGE REPLICATION SOURCE TO | N | 高权限账号无权限执行该语句。 | |
RESET REPLICA | Y-无区分 | 仅当租户下的用户拥有reload权限时,支持使用该语句。不建议授予此权限。 | |
RESET SLAVE | Y-无区分 | 仅当租户下的用户拥有reload权限时,支持使用该语句。不建议授予此权限。 | |
START REPLICA | N | 高权限账号无权限执行该语句。 | |
START SLAVE | N | 高权限账号无权限执行该语句。 | |
STOP REPLICA | N | 高权限账号无权限执行该语句。 | |
STOP SLAVE | N | 高权限账号无权限执行该语句。 | |
复制语句:用于控制组复制的SQL语句。 | START GROUP_REPLICATION | N | 高权限账号无权限执行该语句。 |
STOP GROUP_REPLICATION | N | 高权限账号无权限执行该语句。 | |
预处理语句 | PREPARE | Y | |
EXECUTE | Y | ||
DEALLOCATE PREPARE | Y | ||
复合语句 | 复合语句 | Y-无区分 | 租户模式下支持使用该语句,存储过程中的SQL语句与具体的租户无关。 |
数据库管理报表:账户管理报表 | ALTER USER | Y | |
CREATE ROLE | Y | 租户模式下,可以创建租户下的role。但目前高权限账户不支持 grant role。 | |
CREATE USER | Y | ||
DROP ROLE | Y | 租户模式下,可以创建租户下的role。但目前高权限账户不支持 grant role。 | |
DROP USER | Y | ||
GRANT | Y | ||
RENAME USER | Y | ||
REVOKE | Y | ||
SET DEFAULT ROLE | Y | ||
SET PASSWORD | Y | ||
SET ROLE | Y | ||
数据库管理语句:资源组管理语句 | 资源组管理语句 | N | 线上暂不支持开启resource group。 |
数据库管理语句:表维护语句 | ANALYZE TABLE | Y | |
CHECK TABLE | Y | ||
CHECKSUM TABLE | Y | ||
OPTIMIZE TABLE | Y | ||
REPAIR TABLE | Y | ||
数据库管理语句:组件、插件和可加载函数语句 | 可加载函数的CREATE FUNCTION语句 | Y | 拥有MySQL库中表的INSERT或DELETE权限时,支持使用该语句。但不建议授予租户下用户对应的权限。 |
可加载函数的DROP FUNCTION语句 | Y | ||
INSTALL COMPONENT | Y-无区分 | ||
INSTALL PLUGIN | Y-无区分 | ||
UNINSTALL COMPONENT | Y-无区分 | ||
UNINSTALL PLUGIN | Y-无区分 | ||
数据库管理语句 | CLONE | N | 高权限账号无权限执行该语句。 |
数据库管理语句:SET语句 | SET语法 | Y-无区分 | 仅支持更改当前Session中的变量。 |
SET CHARACTER | Y-无区分 | ||
SET NAMES | Y-无区分 | ||
数据库管理语句:SHOW语句 | SHOW BINARY LOGS | Y-无区分 | 仅当拥有REPLICATION CLIENT权限的用户支持使用该语句。 |
SHOW BINLOG EVENTS | Y-无区分 | 仅当拥有REPLICATION SLAVE权限的用户支持使用该语句。 | |
SHOW CHARACTER SET | Y-无区分 | ||
SHOW COLLATION | Y-无区分 | ||
SHOW COLUMNS | Y | ||
SHOW CREATE DATABASE | Y | ||
SHOW CREATE EVENT | Y | ||
SHOW CREATE PROCEDURE | Y | ||
SHOW CREATE TABLE | Y | ||
SHOW CREATE TRIGGER | Y | ||
SHOW CREATE USER | Y | ||
SHOW CREATE VIEW | Y | ||
SHOW DATABASES | Y | ||
SHOW ENGINE | Y-无区分 | 仅当拥有PROCESS权限的用户支持使用该语句。但不建议对租户下的用户授予该权限。 | |
SHOW ENGINES | Y-无区分 | ||
SHOW ERRORS | Y-无区分 | ||
SHOW EVENTS | Y | 使用 | |
SHOW FUNCTION CODE | Y | ||
SHOW FUNCTION STATUS | Y-无区分 | 不对租户信息进行过滤。 | |
SHOW GRANTS | Y | 仅当拥有SELECT权限的用户支持使用该语句。 | |
SHOW INDEX | Y | ||
SHOW MASTER STATUS | Y-无区分 | 仅当拥有REPLICATION CLIENT权限的用户支持使用该语句。 | |
SHOW OPEN TABLES | Y | ||
SHOW PLUGINS | Y-无区分 | ||
SHOW PRIVILEGES | Y-无区分 | ||
SHOW PROCEDURE CODE | Y | ||
SHOW PROCEDURE STATUS | Y-无区分 | 不对租户信息进行过。 | |
SHOW PROCESSLIST | Y | ||
SHOW PROFILE | Y-无区分 | ||
SHOW PROFILES | Y-无区分 | ||
SHOW RELAYLOG EVENTS | N | 高权限账号无权限执行该语句。 | |
SHOW REPLICAS | N | PolarDB MySQL版802版本不支持使用此语法。 | |
SHOW SLAVE HOSTS | SHOW REPLICAS | N | PolarDB MySQL版802版本不支持使用此语法。 | |
SHOW REPLICA STATUS | N | PolarDB MySQL版802版本不支持使用此语法。 | |
SHOW SLAVE | REPLICA STATUS | Y-无区分 | 仅当拥有REPLICATION CLIENT权限的用户支持使用该语句。 | |
SHOW STATUS | Y-无区分 | ||
SHOW TABLE STATUS | Y | ||
SHOW TABLES | Y | ||
SHOW TRIGGERS | Y | ||
SHOW VARIABLES | Y-无区分 | ||
SHOW WARNINGS | Y-无区分 | ||
数据库管理语句:其他声明 | BINLOG | N | 高权限账号无权限执行该语句。 |
CACHE INDEX | Y | ||
FLUSH | Y | 大部分FLUSH操作需要reload权限,但不建议授予租户内的用户reload权限。 | |
KILL | Y-无区分 | ||
LOAD INDEX INTO CACHE | Y | ||
RESET | Y-无区分 | 仅当拥有reload权限的用户支持使用该语句。 | |
RESET PERSIST | N | 高权限账号无权限执行该语句。 | |
RESTART | N | 高权限账号无权限执行该语句。 | |
SHUTDOWN | N | 高权限账号无权限执行该语句。 | |
实用程序语句 | DESCRIBE | Y | |
EXPLAIN | Y | ||
HELP | Y-无区分 | ||
USE | Y |