为避免因误操作导致数据丢失,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)