mysql ddl dml dql_人际关系总结

mysql ddl dml dql_人际关系总结MySQL DDL操作执行的三种方式 1,INPLACE,在进行DDL操作时,不影响表的读&写,可以正常执行表上的DML操作,避免与COPY方法相关的磁盘I/O和CPU周期,从而最小化数据库的

MySQL DDL操作执行的三种方式
1,INPLACE,在进行DDL操作时,不影响表的读&写,可以正常执行表上的DML操作,避免与COPY方法相关的磁盘I/O和CPU周期,从而最小化数据库的总体负载。
最小化负载有助于在DDL操作期间保持良好的性能和高吞吐量。
2,COPY,不允许并发执行过多个DDL,执行过程中表不允许写但可读。
过程是通过创建一个新结构的临时表,将数据copy到临时表,完成后删除原表,重命名新表的方式,需要拷贝原始表,
3,INSTANT,从 MySQL 8.0.12 开始被引入并默认使用。目前 INSTANT 算法只支持增加列等少量 DDL 类型的操作,其他类型仍然会默认使用 INPLACE。


以下是MySQL 5.7版本中各种DDL操作的执行方式,总结一下:
1,如果DDL的执行方式是InPlace = YES ,那么改DDL的执行会支持并发DML,不会影响表的增删查改,
  1.1,如果DDL的执行方式是InPlace = YES &  Rebuilds Table = No,那么Only Modifies Metadata一定为Yes,也即仅仅修改元数据,类似于INSTANT 
  1.2,如果DDL的执行方式是InPlace = YES  & Rebuilds Table = Yes,那么Only Modifies Metadata一定为No,需要考虑Rebuilds Table对IO和CPU等资源的消耗
2,如果DDL的执行方式是InPlace = NO,那么改DDL的执行期间表只读,阻塞写(增删改),同时需要考虑对IO和CPU等资源的消耗
3,如果是INSTANT方式,类似于1.1
 
如下,对于执行期间不支持并发DML的操作,标记了出来,如果不是影响并发DML的操作,就不需要考虑第三方工具了,只需要考虑IO和CPU等资源的消耗。
因为用第三方工具同样需要消耗IO以及CPU等资源。
正常来说操作,修改字段数据类型,以及增加衍生列,修改衍生列字段顺序这三种,以及多数分区相关的操作的同时,不支持并发DML,其他DDL执行时都支持并发DML。
 
索引操作
mysql ddl dml dql_人际关系总结
CREATE INDEX name ON table (col_list);(ALTER TABLE tbl_name ADD INDEX name (col_list);) DROP INDEX name ON table;(ALTER TABLE tbl_name DROP INDEX name;) ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name, ALGORITHM=INPLACE, LOCK=NONE; CREATE FULLTEXT INDEX name ON table(column); CREATE TABLE geom (g GEOMETRY NOT NULL);ALTER TABLE geom ADD SPATIAL INDEX(g), ALGORITHM=INPLACE, LOCK=SHARED; ALTER TABLE tbl_name DROP INDEX i1, ADD INDEX i1(key_part,...) USING BTREE, ALGORITHM=INPLACE;

代码100分

 
主键操作
mysql ddl dml dql_人际关系总结
代码100分ALTER TABLE tbl_name ADD PRIMARY KEY (column) ALTER TABLE tbl_name DROP PRIMARY KEY
ALTER TABLE tbl_name DROP PRIMARY KEY, ADD PRIMARY KEY (column)

列操作
mysql ddl dml dql_人际关系总结

ALTER TABLE tbl_name ADD COLUMN column_name column_definition,
ALTER TABLE tbl_name DROP COLUMN column_name
ALTER TABLE tbl CHANGE old_col_name new_col_name data_type
ALTER TABLE tbl_name MODIFY COLUMN col_name column_definition FIRST
ALTER TABLE tbl_name CHANGE c1 c1 BIGINT
ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255)
ALTER TABLE tbl_name ALTER COLUMN col SET DEFAULT literal
ALTER TABLE tbl ALTER COLUMN col DROP DEFAULT
ALTER TABLE table AUTO_INCREMENT=next_value
ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NULL
ALTER TABLE tbl_name MODIFY COLUMN column_name data_type NOT NULL
ALTER TABLE t1 MODIFY COLUMN c1 ENUM("a", "b", "c", "d")

 
衍生列(generated column)操作
mysql ddl dml dql_人际关系总结

代码100分ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED) ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE; ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL) ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE

 
外键操作
mysql ddl dml dql_人际关系总结
ALTER TABLE tbl1 ADD CONSTRAINT fk_name FOREIGN KEY index (col1)REFERENCES tbl2(col2) referential_actions; ALTER TABLE tbl DROP FOREIGN KEY fk_name;

 
表操作
mysql ddl dml dql_人际关系总结
ALTER TABLE tbl_name ROW_FORMAT = row_format ALTER TABLE tbl_name KEY_BLOCK_SIZE = value ALTER TABLE tbl_name STATS_PERSISTENT=0, STATS_SAMPLE_PAGES=20, STATS_AUTO_RECALC=1, ALGORITHM=INPLACE, LOCK=NONE; ALTER TABLE tbl_name CHARACTER SET = charset_name, ALGORITHM=INPLACE, LOCK=NONE; ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name, ALGORITHM=COPY; OPTIMIZE TABLE tbl_name; ALTER TABLE tbl_name FORCE, ALGORITHM=INPLACE, LOCK=NONE; ALTER TABLE tbl_name ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE; ALTER TABLE old_tbl_name RENAME TO new_tbl_name, ALGORITHM=INPLACE, LOCK=NONE;

 
表空间操作
mysql ddl dml dql_人际关系总结

ALTER TABLE tbl_name ENCRYPTION="Y", ALGORITHM=COPY;

 

分区操作
mysql ddl dml dql_人际关系总结

 

 

 

参考:
 
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11128.html

(0)
上一篇 2022-12-16
下一篇 2022-12-16

相关推荐

  • 使用Pycharm安装Pandas指南

    使用Pycharm安装Pandas指南在Python编程领域中,Pandas是一个非常有用的工具。它提供高效、易于使用的数据结构和数据分析工具。然而,安装Pandas并不总是容易的,特别是当你不知道从哪里开始的时候。在本篇文章中,我们将介绍在Pycharm中如何安装Pandas。

    2024-05-14
    63
  • 优化生成随机内容的方法

    优化生成随机内容的方法在Python中,我们可以使用random库中的函数来生成随机数,如下所示:

    2024-03-12
    75
  • redis源码学习02:跳跃表插入结点

    redis源码学习02:跳跃表插入结点本文是本人在学习redis源码时的笔记,本文主要是对跳跃表插入结点代码的中文注释,如有错误欢迎指正。 有关跳跃表的原理可以上网搜材料,有很多。 首先看下redis源码里有关跳跃表的相关结构体: ty…

    2023-03-14
    165
  • 【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践「终于解决」

    【巨杉数据库SequoiaDB】巨杉Tech | 分布式数据库千亿级超大表优化实践「终于解决」01 引言 随着用户的增长、业务的发展,大型企业用户的业务系统的数据量越来越大,超大数据表的性能问题成为阻碍业务功能实现的一大障碍。其中,流水表作为最常见的一类超大表,是企业级用户经常碰到的性能瓶颈…

    2023-02-01
    139
  • Python中的os.mkdir recursive函数:快速递归创建文件夹

    Python中的os.mkdir recursive函数:快速递归创建文件夹在Python中,os.mkdir()函数可以用来创建单个文件夹,但当我们需要创建多层嵌套的文件夹时,os.mkdir()就无法胜任。这时候,os.mkdir()函数中的recursive参数就派上用场了。接下来,我们将从多个方面详细阐述Python中的os.mkdir recursive函数。

    2024-02-12
    86
  • sql server临时删除/禁用非聚集索引并重新创建加回/启用的简便编程方法研究对比「终于解决」

    sql server临时删除/禁用非聚集索引并重新创建加回/启用的简便编程方法研究对比「终于解决」前言: 由于新型冠状病毒影响,博主(zhang502219048)在2020年1月份从广东广州工作地回到广东揭阳产业转移工业园磐东街道(镇里有阳美亚洲玉都、五金之乡,素以“金玉”闻名)老家后,还没过去

    2023-02-19
    159
  • Python目录位置

    Python目录位置Python是一门高级编程语言,由Guido van Rossum在1989年发明。Python使用简单、易学、高效、稳定、免费等特点,在各种应用领域都有广泛的应用。Python被称为“入门容易,深入难”的语言,Python的高可读性、动态特性、内置库丰富等特点,使它成为了开发者的首选语言之一。但是,尽管Python易学易用,但是在使用Python时,我们需要了解Python的语法规则、文件格式等等,其中之一就是Python目录位置。在本文中,我们将对Python目录位置做详细的介绍。

    2024-07-30
    35
  • markdown的python(markdown)

    markdown的python(markdown)Markdown本来就是依托于HTML,没有HTML就没有Markdown,因此正常的操作就是先将Markdown解析为HTML格式文本,再对其进行处理。

    2023-10-28
    138

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注