Mysql 在MariaDB/InnoDB中运行ADD列后是否存在任何风险?

Mysql 在MariaDB/InnoDB中运行ADD列后是否存在任何风险?,mysql,mariadb,innodb,Mysql,Mariadb,Innodb,我是在Centos7和Centos8上使用MariaDB 10.4.13的DBA 我们的开发团队需要在现有的(小)表中间建立一个新的列。 所以我们用了这个: ALTER TABLE tablename在c5后面添加列c1 enum('DEL','END')不为null默认值'END' 这很好,但我对这个话题还不熟悉。(我曾经担任MS-SQL和DB2的DBA) 我不知道MariaDB使用ADD AFTER究竟(物理)做了什么。有什么风险吗?这会引起什么问题吗?在DB2中,这不是那么容易。 < P>

我是在Centos7和Centos8上使用MariaDB 10.4.13的DBA

<>我们的开发团队需要在现有的(小)表中间建立一个新的列。 所以我们用了这个:

ALTER TABLE tablename在c5后面添加列c1 enum('DEL','END')不为null默认值'END'

这很好,但我对这个话题还不熟悉。(我曾经担任MS-SQL和DB2的DBA)


我不知道MariaDB使用ADD AFTER究竟(物理)做了什么。有什么风险吗?这会引起什么问题吗?在DB2中,这不是那么容易。

< P>是否添加一个新列作为表的最后一列或中间没有差别。任何改变行大小的更改都会创建一个新表空间,并将数据复制到一个新表空间。这不会引起问题

在复制过程中,它会锁定表。但你说这是一张小桌子。这不是非常具体的(我不知道你认为小或大),但它可能不会花很长时间。也许一两秒钟


但是,如果应用程序一直在使用该表,即使是短暂的锁定也可能导致应用程序出现中断。你应该和你的经理讨论如何安排最佳的时间来使用不会影响表的应用程序的修改。

是否添加一个新列作为表的最后一列或中间没有差别。任何改变行大小的更改都会创建一个新表空间,并将数据复制到一个新表空间。这不会引起问题

在复制过程中,它会锁定表。但你说这是一张小桌子。这不是非常具体的(我不知道你认为小或大),但它可能不会花很长时间。也许一两秒钟


但是,如果应用程序一直在使用该表,即使是短暂的锁定也可能导致应用程序出现中断。您应该与您的经理讨论安排最佳时间进行更改,以免影响使用该表的应用程序。

您担心的风险是什么?在运行报表期间,表被锁定?您可以克隆实时数据库并在克隆上运行命令,以查看是否存在任何问题。DDL操作将阻止DML操作,包括读和写。因此,当您的表有大量数据时,这将是一个长时间的阻止。为了更好地选择,您可以使用不会阻止DML操作的联机DDL操作。“小”表--就这么做吧。您担心什么样的风险?在语句运行期间表被锁定?您可以克隆实时数据库并在克隆上运行命令,以查看是否存在任何问题。DDL操作将阻止DML操作,包括读和写。因此,当您的表有大量数据时,这将是一个长时间的阻止。为了更好地选择,您可以使用不会阻止DML操作的联机DDL操作。“小”桌子--就这么做吧。