MySQL删除陷阱的方法
发布时间:2023-07-01 11:24:08 所属栏目:MySql教程 来源:
导读:如果要从大表中删除许多行,则可能会超过InnoDB表的锁表大小。为了避免这个问题,或者仅仅为了最小化表保持锁定的时间,以下策略可能会有所帮助:
1、使用存储过程进行不影响业务的小批量、长时间删除,删除完毕后
1、使用存储过程进行不影响业务的小批量、长时间删除,删除完毕后
|
如果要从大表中删除许多行,则可能会超过InnoDB表的锁表大小。为了避免这个问题,或者仅仅为了最小化表保持锁定的时间,以下策略可能会有所帮助: 1、使用存储过程进行不影响业务的小批量、长时间删除,删除完毕后将存储过程从生产环境下线。 2、选择不删除的行,同步与原表结构相同的空表中:INSERT INTO t_copy SELECT * FROM t WHERE ... ; 3、用于 RENAMETABLE 以原子方式将原始表移开并将副本重命名为原始名称:RENAME TABLE t TO t_old, t_copy TO t; 1、多表删除 根据WHERE子句中的条件,可以在DELETE语句中指定多个表以从一个或多个表中删除行,但是不能在多表DELETE中使用ORDER BY或LIMIT。 DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id; 2、update语句原理 UPDATE是修改表中行的语句,返回实际更改的行数,要检查删除的行数我们一般写代码的时候使用 int 类型返回,对于单表语法,UPDATE语句使用新值更新命名表中现有行的列。 SET 要修改的列以及应该给出的值,每个值都可以作为表达式或关键字DEFAULT给出,以将列显式设置为其默认值。 WHERE 指定标识要更新哪些行的条件。如果没有WHERE子句,将更新所有行。如果指定了ORDER BY子句,则将按指定的顺序更新行。LIMIT子句限制了可以更新的行数。 -- 更新单表语法 UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET assignment_list [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] -- 使用LOW_PRIORITY修饰符,UPDATE延迟执行,直到没有其他客户端从表中读取 -- 使用IGNORE修饰符,即使更新期间发生错误,更新语句也不会中止 UPDATE item_id, discounted SET items_info WHERE id = ""; 3、select SELECT用于检索从一个或多个表中选择的行,并且可以包括UNION操作和子查询。从MySQL 8.0.31开始,还支持INTERSECT和EXCEPT操作。后面笔者会单独拿出一篇文章讲解子查询、左连接、查询优化、查询原理等等。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
