为避免因误操作导致数据丢失,PolarDB-X默认禁止执行高危类SQL,例如全表删除(即不带WHERE或LIMIT条件的DELETE语句)和全表更新(即不带WHERE或LIMIT条件的UPDATE语句)等语句。但您也可以通过HINT语句避开上述自动保护,强制执行全表删除或更新操作。

语句

您可以在UPDATE或DELETE语句中加上如下HINT执行全表删除或更新:

HINT:/!TDDL:FORBID_EXECUTE_DML_ALL=false*/

示例

  • 若DELETE语句中未加任何WHERE或LIMIT条件,执行时会被拦截且出现如下错误提示:
    mysql> delete from tt;
    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则可成功执行:
    mysql> /!TDDL:FORBID_EXECUTE_DML_ALL=false*/delete from tt;
    Query OK, 10 row affected (0.21 sec)
  • 若UPDATE语句中未加任何WHERE或LIMIT条件,执行时会被拦截且出现如下错误提示:
    mysql> update tt set id = 1;
    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则可成功执行:
    mysql> /!TDDL:FORBID_EXECUTE_DML_ALL=false*/update tt set id = 1;
    Query OK, 10 row affected (0.21 sec)