全部产品
分布式关系型数据库 DRDS

高危类 SQL 自动保护

更新时间:2017-08-14 14:42:15   分享:   

为了防止误操作,DRDS 默认禁止全表删除和全表更新的操作。

下列语句默认会被禁止:

  1. DELETE 语句不带 WHERE 条件或者 LIMIT 条件;
  2. UPDATE 语句不带 WHERE 条件或者 LIMIT 条件。

如果确实需要执行这类操作,可以通过 HINT 来临时跳过这个限制:HINT:/!TDDL:FORBID_EXECUTE_DML_ALL=false*/

示例

  1. 执行全表删除默认会被拦截:

    1. mysql> delete from tt;
    2. ERR-CODE: [TDDL-4620][ERR_FORBID_EXECUTE_DML_ALL] Forbid execute DELETE ALL or UPDATE ALL sql. More: [http://middleware.alibaba-inc.com/faq/faqByFaqCode.html?faqCode=TDDL-4620]

    加 HINT 则可执行成功:

    1. mysql> /!TDDL:FORBID_EXECUTE_DML_ALL=false*/delete from tt;
    2. Query OK, 10 row affected (0.21 sec)
  2. 执行全表更新默认会被拦截:

    1. mysql> update tt set id = 1;
    2. ERR-CODE: [TDDL-4620][ERR_FORBID_EXECUTE_DML_ALL] Forbid execute DELETE ALL or UPDATE ALL sql. More: [http://middleware.alibaba-inc.com/faq/faqByFaqCode.html?faqCode=TDDL-4620]

    加 HINT 则可执行成功:

    1. mysql> /*TDDL:FORBID_EXECUTE_DML_ALL=false*/update tt set id = 1;
    2. Query OK, 10 row affected (0.21 sec)
  3. DELETE 或者 UPDATE 语句中带有 WHERE 或者 LIMIT 条件,不会出现这个限制。

    1. mysql> delete from tt where id = 1;
    2. Query OK, 1 row affected (0.21 sec)
本文导读目录
本文导读目录
以上内容是否对您有帮助?