专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

mysql查询不到表,mysql新增字段为何会锁表_数据库

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/3/5 13:29:43       共计:3586 浏览
mysql查询不到表,mysql新增字段为何会锁表?

MySQL在5.6.0版本之前对表结构进行修改会锁表的,5.6以后引入了online ddl,online ddl解决的就是修改表结构时候锁表的问题,能够让mysql在进行表变更时候,不影响正常的读写操作。要知道为什么表结构变更时候(新增/修改字段、索引的删除和添加)会锁表,就得知道当我们修改表结构时候,MySQL都做了哪些事情。SQL语言DQL:数据查询语言:SELECT <字段名表> FROM <表或视图名> WHERE <查询条件>;DML:数据操作语言:INSERT/UPDATE/DELETE;DDL:数据定义语言:CREATE TABLE/VIEW/INDEX;DCL:数据控制语言:授权、事物ROLLBACK/COMMIT;DDL在MySQL5.6之前的版本中,执行ddl有copy和inplace两种方式,可以根据命名就知道两种方式的意思。其中replace方式仅支持添加、删除索引操作。这两种方式都是锁表操作。copy方式执行的操作:创建一个临时表,和要修改的表结构一致;将原来的表锁住,禁止DML操作,可以DQL操作;将原来的表数据拷贝到临时表中将临时表重命名为原来的表,删除原来的表创建新的索引数据inplace方式执行的操作:新建索引的数据字典锁表,禁止DML操作,可以DQL操作;构造新的索引数据等待所有只读操作完毕创建索引结束所以表新增字段属于ddl数据定义语言,采用的是copy方式,锁表。那么是否说online ddl就不存在锁表的问题了呢?不是的,对于不支持online ddl操作的DDL语句,还得采取copy方式,比如修改列的数据类型、主键的删除、表字符集的修改等这些需要彻底修改记录数据格式的操作。线上大数据表如何执行DDL当我们需要对生产数据库中的表执行DDL的话,一定要小心,一定要慎之又慎。一不小心就会导致锁表,锁表一旦产生,数据库就会堆积大量对该表的请求,瞬间将数据库的连接吃没,CPU飙升,最后。。。数据库宕机!这里提供以下思路供大家参考:1.停服务执行,这种方式要求业务可以停止运行的情况下执行,比如半夜凌晨执行表结构变更,简单粗暴。

2.参考copy的方式自己执行这些步骤:

创建一个临时表table_copy,代表最新的表结构和索引;

把旧表的数据copy到新表:这步不要用sql操作,自己写一个脚本,按照数据的创建时间一次10000条的拷贝到新表,这个过程中可能会有新的数据进入,所以根据每一条记录的创建时间不断同步,直至两张表的记录完全一致,再执行第三步。删除旧表,把新表重命名为旧表的名字3.pt-online-schema-change:在线修改大数据表结构工具,可以google了解一下。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:mysql查询优先级,已学java基本内容和java_数据库 | ·下一条:mysql查询不匹配,Java程序员要如何实现涨薪_数据库

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有