查看“Mysql delete”的源代码
←
Mysql delete
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
==性能== 在无需知晓删除行数的情况下,相比于没有 WHERE 子句的 DELETE 语句,TRUNCATE TABLE 语句是清空表的更快方式。与 DELETE 不同,TRUNCATE TABLE 不能在事务中使用,或者如果您对表持有锁也不能使用。 为确保给定的 DELETE 语句不会花费过多时间,针对 DELETE 的 MySQL 特定的 LIMIT row_count 子句指定了要删除的最大行数。如果要删除的行数大于限制值,则重复该 DELETE 语句,直到受影响的行数小于 LIMIT 值。 ==自动递增列== 如果删除包含 AUTO_INCREMENT 列的最大值的行,对于 MyISAM 或 InnoDB 表,该值不会被重新使用。如果在自动提交模式下使用 DELETE FROM tbl_name(没有 WHERE 子句)删除表中的所有行,则除 InnoDB 和 MyISAM 之外的所有存储引擎的序列都将重新开始。 ==删除顺序== 如果 DELETE 语句包含 ORDER BY 子句,则按照该子句指定的顺序删除行。这主要与 LIMIT 结合使用时很有用。例如,以下语句找到与 WHERE 子句匹配的行,根据 timestamp_column 进行排序,并删除第一个(最旧的)行: <syntaxhighlight lang="sql"> DELETE FROM somelog WHERE user = 'jcole' ORDER BY timestamp_column LIMIT 1; </syntaxhighlight> ORDER BY 还有助于按照避免参照完整性违规所需的顺序删除行。 ==InnoDB 表== 如果从一个大型的 InnoDB 表中删除很多行,您可能会超出 InnoDB 表的锁表大小。为避免此问题,或者只是为了尽量缩短表被锁定的时间,以下策略(完全不使用 DELETE)可能会有所帮助: 1. 将不删除的行选择到一个与原始表具有相同结构的空表中: <syntaxhighlight lang="sql"> INSERT INTO t_copy SELECT * FROM t WHERE... ; </syntaxhighlight> 2. 使用 RENAME TABLE 原子地将原始表移开,并将副本重命名为原始名称: <syntaxhighlight lang="sql"> RENAME TABLE t TO t_old, t_copy TO t; </syntaxhighlight> 3. 删除原始表: <syntaxhighlight lang="sql"> DROP TABLE t_old; </syntaxhighlight> 在 RENAME TABLE 执行时,其他会话无法访问所涉及的表,因此重命名操作不受并发问题影响。
返回至“
Mysql delete
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息