10年专注数字生态产品质量有保 售后7×24小时服务
24小时咨询热线:4006666666
联系我们
数字生态有限公司
全国免费服务热线:4006666666
地址 :中国·北京
联系人:陈经理
您的位置: 首页>>热门话题>>正文
热门话题

[mysql 加字段语句]如何优雅地在mysql5.6中添加字段?

时间:2023-05-20 作者:admin666ss 点击:90次

工作中最常出现的问题是,如何在网上经常使用的大表中添加字段?

示例:下面的用户表字段。

有些同学说这还不简单,不能直接添加,使用以下命令。

添加完成后,再次检查表结构。

这个追加不成功吗?有什么!

是的,离线数据库怎么做都可以,但是在线数据库这样操作的话,整个服务都有停机的危险!自己也离毕业不远。

不是威胁性的话。我们去找凯斯测试一下。

image [mysql 加字段语句]如何优雅地在mysql5.6中添加字段? 热门话题

为什么会发生这种事?

image [mysql 加字段语句]如何优雅地在mysql5.6中添加字段? 热门话题

MDL锁定的作用是什么?

为了确保并行工作下数据的一致性。

如果一个事务正在运行,而另一个事务此时修改了表结构,则可能会出现无法重新读取当前事务的问题,并且事务也可能不会提交。

何时添加MDL锁?

MDL锁是MySQL自动隐式锁,不需要手动操作。

执行DDL语句时,MySQL会自动添加MDL读取锁定。

MySQL在执行DML语句时自动添加MDL写锁。

读锁和读锁不是互斥的,读锁和写锁写锁和写锁是互斥的。

注:MDL锁是锁定整个表的表锁。

什么是DML和DDL?

服务范围:对表数据执行操作,如insertdeleteselectupdate等。

修改表结构后,MySQL会自动添加表锁,并且是写锁,因此,它会阻止以后的所有读和写请求,从而导致严重的后果。

有没有优雅地在网上表中添加字段的方法?

当然,从MySQL 5.6版开始,添加了在线DDL,允许在执行DDL时同时执行DML。简单的翻译是,修改表结构时,可以同时执行额外的删除修改操作。

从MYSQL 8 . 0版开始,线上DDL已经过最佳化,并支援快速新增资料栏,可让您在大型表格初新增栏位。

例如:

这两个参数分别是干什么用的?有什么选择?

复制:

复制方法,MySQL5.6之前的DDL通过首先创建新表修改新表结构将旧表数据复制到新表删除旧表和重命名新表来运行。执行过程很耗时,生成大量磁盘IO,使用CPU,使缓冲池无效,旧表需要锁定,性能不好,目前很少使用。

原地修改,引入MySQL5.6的优点是,无需在服务器层复制表数据,即可同时执行DML操作。过程是先添加MDL写锁,执行初始化操作,然后降级到MDL读锁,执行DDL操作,升级到MDL写锁,最后完成DDL操作。

通过引入快速修改MySQL8.0,可以快速向大表中添加字段。

性能为“即时放置拷贝”。

LOCK指定在执行过程中是否锁定。选项包括:

NONE

允许在不解除锁定的情况下执行DML操作。

SHARED

添加读取锁定以允许读取操作,并禁止DML操作。

默认锁定模式。如果满足DDL操作,则默认锁定模式将允许尽可能多的读取和DML操作。

添加禁止读取和DML操作的写锁定。

联机DDL并不支持所有DDL操作。请查看支持哪些操作。

允许同时DML

仅修改元数据

添加列

yes

yes

yes

删除列

yes

yes

yes

重命名列

yes

yes

yes

更改列顺序

yes

yes

yes

设置列默认值

yes

yes

yes

yes

更改列数据类型

yes

yes

yes

yes

删除列默认值

yes

yes

yes

yes

更改自动增量值

yes

yes

将列设置为空

yes

yes

yes

列设置not null

yes

yes

yes

image [mysql 加字段语句]如何优雅地在mysql5.6中添加字段? 热门话题


相关推荐

发表评论