高危类 SQL 自动保护
为了防止误操作,DRDS 默认禁止全表删除和全表更新的操作。
下列语句默认会被禁止:
- DELETE 语句不带 WHERE 条件或者 LIMIT 条件;
- UPDATE 语句不带 WHERE 条件或者 LIMIT 条件。
如果确实需要执行这类操作,可以通过 HINT 来临时跳过这个限制:HINT:/!TDDL:FORBID_EXECUTE_DML_ALL=false*/
示例
执行全表删除默认会被拦截:
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)
执行全表更新默认会被拦截:
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)
DELETE 或者 UPDATE 语句中带有 WHERE 或者 LIMIT 条件,不会出现这个限制。
mysql> delete from tt where id = 1;
Query OK, 1 row affected (0.21 sec)
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论