美文网首页
阿里云DRDS使用限制

阿里云DRDS使用限制

作者: bluexiii | 来源:发表于2017-07-31 19:25 被阅读358次

    以下大部分内容非原创,整理自阿里云官方文档

    SQL大类限制

    • 暂不支持用户自定义数据类型、自定义函数。
    • 暂不支持视图、存储过程、触发器、游标。
    • 暂不支持 BEGIN…END、LOOP…END LOOP、REPEAT…UNTIL…END REPEAT、WHILE…DO…END WHILE 等复合语句。
    • 暂不支类似 IF ,WHILE 等流程控制类语句。

    DDL限制

    • CREATE TABLE tbl_name LIKE old_tbl_name 不支持拆分表。
    • CREATE TABLE tbl_name SELECT statement 不支持拆分表。

    数据库管理限制

    • SHOW WARNINGS Syntax 不支持 LIMIT/COUNT 的组合。
    • SHOW ERRORS Syntax 不支持 LIMIT/COUNT 的组合。

    DML限制

    • 暂不支持 SELECT INTO OUTFILE/INTO DUMPFILE/INTO var_name。
    • 暂不支持 INSERT DELAYED Syntax。
    • 暂不支持非 WHERE 条件的 Correlate Subquery。
    • 暂不支持 SQL 中带聚合条件的 Correlate Subquery。
    • 暂不支持 SQL 中对于变量的引用和操作,比如 SET @c=1, @d=@c+1; SELECT @c, @d。

    关于 Correlated Subquery 的解释:
    Correlated Subquery is a sub-query that uses values from the outer query. In this case the inner query has to be executed for every row of outer query.
    See example here http://en.wikipedia.org/wiki/Correlated_subquery
    Simple subquery doesn't use values from the outer query and is being calculated only once:

    SELECT id, first_name
    FROM student_details
    WHERE id IN (SELECT student_id
    FROM student_subjects
    WHERE subject= 'Science');
    

    分析

    DDL限制、数据库管理限制,由于与应用关系不大,编码时无须特别关心。
    SQL大类限制,如视图、存储过程、触发器、游标等,通常是不被提倡的坏味道,如果有的话,直接改方式实现即可。
    DML限制,需要特别注意。如果使用ORM,应该不会有太大问题,但用jdbcTemplate写原生SQL的话(如实时报表类的功能点)有可能会踩坑。
    另外默认不支持跨实例事务,私有云貌似也没有GTS选项,需要在代码层面进行优化。

    DML错误示例

    select * from (select id,name from normal_tables) t
    

    [b8040ac9f401000][192.168.2.47:3306][dev_sc_dmanage]ERR-CODE: [TDDL-4007][ERR_CANNOT_FETCH_TABLE_META] Table 'normal_tables' metadata cannot be fetched because Table 'dev_sc_dmanage_ssiu_0000.normal_tables' doesn't exist. More: [http://middleware.alibaba-inc.com/faq/faqByFaqCode.html?faqCode=TDDL-4007]

    select a,*,b.* from shard_table a
    left join (select id,name from normal_table) b on b.id=a.id;
    

    [b80405010801000][192.168.2.47:3306][dev_sc_dmanage]column: a is not existed in either null or select clause

    select a,*,b.* from normal_tables a
    left join (select id,name from shard_table) b on b.id=a.id;
    

    [b8040692c001000][192.168.2.47:3306][dev_sc_dmanage]ERR-CODE: [TDDL-4007][ERR_CANNOT_FETCH_TABLE_META] Table 'normal_tables' metadata cannot be fetched because Table 'dev_sc_dmanage_ssiu_0000.normal_tables' doesn't exist. More: [http://middleware.alibaba-inc.com/faq/faqByFaqCode.html?faqCode=TDDL-4007]

    insert into group_seq_tbl (name) values ('hello');
    insert into group_seq_tbl (name) values ('hello');
    

    [b807dfe12c01000-24][192.168.2.47:3306][dev_sc_dmanage]ERR-CODE: [TDDL-4603][ERR_ACCROSS_DB_TRANSACTION] Transaction accross db is not supported in current transaction policy, transaction node is: DEV_SC_DMANAGE_1501040729564NYQSDEV_SC_DMANAGE_SSIU_0003_RDS, but this sql execute on: DEV_SC_DMANAGE_1501040729564NYQSDEV_SC_DMANAGE_SSIU_0006_RDS. More: [http://middleware.alibaba-inc.com/faq/faqByFaqCode.html?faqCode=TDDL-4603]

    相关文章

      网友评论

          本文标题:阿里云DRDS使用限制

          本文链接:https://www.haomeiwen.com/subject/togrlxtx.html