首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 修改表的innodb

基础概念

MySQL中的InnoDB存储引擎是MySQL的默认存储引擎,它提供了事务安全(ACID兼容)的表,同时还支持行级锁定和外键。InnoDB设计用于处理大量的短期事务,并且能够有效地处理并发读写操作。

修改表的InnoDB

如果你想将一个已经存在的表从其他存储引擎(如MyISAM)转换为InnoDB,或者修改InnoDB表的某些属性,可以使用以下SQL命令:

转换存储引擎

代码语言:txt
复制
ALTER TABLE table_name ENGINE=InnoDB;

这条命令会将名为table_name的表转换为InnoDB存储引擎。

修改InnoDB表的属性

例如,如果你想修改InnoDB表的行格式,可以使用:

代码语言:txt
复制
ALTER TABLE table_name ROW_FORMAT=COMPRESSED;

这将改变表的行格式为压缩格式,可以节省磁盘空间并提高I/O性能。

相关优势

  • 事务安全:InnoDB支持ACID事务,确保数据的完整性和一致性。
  • 行级锁定:InnoDB使用行级锁定来提高并发性能,允许多个事务同时读取或修改不同的行。
  • 外键支持:InnoDB支持外键约束,有助于维护数据之间的关联性。
  • 崩溃恢复:InnoDB具有崩溃恢复功能,能够在系统崩溃后自动恢复数据。

类型

InnoDB表有多种类型,包括:

  • 普通表:标准的InnoDB表。
  • 压缩表:通过压缩行格式来节省磁盘空间的表。
  • 临时表:用于存储临时数据的表,生命周期仅限于当前会话。

应用场景

InnoDB适用于需要高并发读写、事务处理和数据完整性的应用场景,如电子商务网站、金融系统、社交网络等。

可能遇到的问题及解决方法

问题:转换存储引擎失败

原因:可能是由于表正在被使用,或者磁盘空间不足。

解决方法

  • 确保没有其他连接正在使用该表。
  • 检查磁盘空间,并释放一些空间。
代码语言:txt
复制
SHOW PROCESSLIST; -- 查看是否有进程正在使用该表
ALTER TABLE table_name ENGINE=InnoDB; -- 再次尝试转换

问题:修改表属性后性能下降

原因:可能是由于修改了行格式或其他属性导致性能下降。

解决方法

  • 分析查询性能,使用EXPLAIN命令查看查询计划。
  • 根据实际情况调整表的属性,可能需要回滚到之前的设置。
代码语言:txt
复制
EXPLAIN SELECT * FROM table_name WHERE ...; -- 分析查询性能
ALTER TABLE table_name ROW_FORMAT=DEFAULT; -- 回滚到默认行格式

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL slow_log不能修改innodb引擎

背景 从MySQL.slow_log 获取慢查询日志很慢,该是csv,没有索引。...想添加索引来加速访问,而csv引擎不能添加索引(csv引擎存储是以逗号分割文本来存储),只能改存储引擎来添加索引了 mysql.slow_log能改成myisam,不能改成innodb mysql...0 Warnings: 0 mysql.general_log也不能改成innodb mysql> alter table mysql.general_log engine=myisam; Query...为什么不支持innodb引擎并未说明 基于什么来考虑不支持innodb了? 像朋友请教了下 估计是日志 这种引擎会耗费大量redo, undo 资源吧 这是没有必要。。。...(query_time); set global slow_query_log=@old_slow_log_state; 注意问题 更改日志存储引擎需要先关闭日志,还需要不记录会话binlog

50820

MYSQL INNODB压缩

压缩方法 如果设置了ROW_FORMAT=COMPRESSED,那可以忽略key_block_size设置,这时默认key_block_size为innodb_page_size值一半,MYSQL默认设置...压缩状态查询 可通过查询INFORMATION_SCHEMA下相关INNODB压缩,获取压缩数据状态: INNODB_CMP和INNODB_CMP_RESET:压缩页数据状态信息; INNODB_CMPMEM...和INNODB_CMPMEM_RESET:innodb_buffer_pool中压缩页信息; INNODB_CMP_PER_INDEX和INNODB_CMP_PER_INDEX_RESET:MYSQL5.7...InnoDB未压缩数据页是16K,根据选项组合值,mysql为每个.ibd文件使用1kb,2kb,4kb,8kb,16kb页大小,实际压缩算法并不会受KEY_BLOCK_SIZE值影响,这个值只是决定每个压缩块有多大...压缩上大量dml操作可能会导致压缩失败,如何调整额外参数来解决这个问题 调整innodb_online_alter_log_max_size 大小或者采用pt工具修改,尽量在非高峰期操作

9.4K40
  • MySQL原理 - InnoDB限制

    本文基于MySQL 5.7 目前OLTP业务如果是使用MySQL一般都会使用InnoDB引擎,这也是默认引擎。那么这种引擎有什么限制呢?.../doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_page_size 基本个数限制 在MySQL5.6.9以后版本,一个最大列个数...(包含虚拟列,虚拟列是MySQL5.7新特性)为1017,在之前版本是1000 一个最大索引数量(非主键索引)为64个 复合索引最多可以包括16个列,超过会报错:ERROR 1070 (42000...如果索引字段,总长度超过这个限制,建或者修改就会报错。 如果更改了配置或者行格式,导致最大限制从3072 bytes变为767bytes。...这个配置未来过期掉,也就是说,在之后版本中,默认索引字段前缀最大值为3072Bytes(不考虑Row Format) 关于innodb_page_size这个数据库实例初始化配置: 如果在创建数据库实例时候修改

    1.4K30

    MySQL InnoDB空间加密

    MySQL5.7.11开始,MySQLInnoDB支持存储在单独空间中数据加密 。此功能为物理空间数据文件提供静态加密。.../keyring/keyring  # 路径不存在,需要创建 innodb_file_per_table=1                # 只作用于独立空间 1.2 创建加密所需路径并配置权限...2 测试加密空间 2.1 创建加密 创建一张新,并添加ENCRYPTION='Y' ,加密空间 mysql> create table test1( id int primary key...另外,keyring_file_data也是可以动态调整,比较简单,就不演示了 2.4 统计空间加密 想要知道哪些空间加密了,可以通过数据字典表里查看 mysql> SELECT TABLE_SCHEMA...----+ | 1 | anm | | 2 | keyring | +----+---------+ 2 rows in set (0.00 sec) 至此,InnoDB空间简单使用就演示完毕

    3.4K10

    MySQL修改字段

    MySQL修改字段 MySQL 修改表字段方法有两种: ALTER TABLE MODIFY COLUMN。...其语法如下: ALTER TABLE 名 MODIFY COLUMN 字段名 字段类型; 其中,名 表示要修改名,字段名 表示要修改字段名,字段类型 表示修改字段类型。...例如,修改 users 字段 username 类型为 VARCHAR(50),可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN username VARCHAR...其语法如下: ALTER TABLE 名 MODIFY COLUMN 字段名 字段类型 [属性]; 其中,名 表示要修改名,字段名 表示要修改字段名,字段类型 表示修改字段类型,属性 表示修改字段属性...例如,将 users 中字段 age 数据类型修改为 INT,并设置默认值为 0,可以使用以下 SQL 语句: ALTER TABLE users MODIFY COLUMN age INT DEFAULT

    5.4K10

    MySQL InnoDB引擎空间(tablespace)

    = ON 现在MySQL版本已经可以实现自动扩展空间,其中innodb_file_per_table默认是开启,表示为每一张新建创建空间,这样可以避免ibdata1过于庞大。...REDO logs 用于崩溃恢复,当mysqld启动时,InnoDB会根据REDO log自动恢复由不完整事务修改数据,哪怕没有建立任何连接,mysqld崩溃前没有更新完整数据都会被replay,...UNDO通过保留活动事务(MVCC)修改未提交数据来保证读一致性。 从此存储区域检索未修改数据。UNDO log也称为回滚段。...默认情况下,UNDO空间是系统空间一部分,当然从MySQL5.6开始也允许用户自定义一个UNDO空间,需要注意是: 如果自定义了UNDO空间,在系统空间UNDO log也就会失效 这一配置需要在...tablespace 保存和检索临时修改未提交数据和相关对象,始于MySQL5.7.2,server运行时用于回滚临时修改

    5.8K60

    MySql InnoDB 存储引擎优化

    一、InnoDB 存储优化 1、OPTIMIZE TABLE 适时使用 OPTIMIZE TABLE 语句来重组,压缩浪费空间。这是在其它优化技术不可用情况下最直接方法。...例如,一秒需要提交几千事务,或者每隔2-3个小时提交一次事务不同应用表现。 1、AUTOCOMMIT 设置 MySQL 默认设置 AUTOCOMMIT=1 会限制繁忙数据库性能。...MySQL 5.7.10版本,InnoDB XA事务两阶段提交是默认支持,不能设置禁用innodb_support_xa。...这样,这些事务可以一直访问到相关旧数据。所以耗时事务会阻止 InnoDB 清除其它相关事务数据。 6、关联删除 如果一个耗时事务修改或者删除了某些行。...7、关联查询 当一个耗时事务修改了某个,其它使用此事务将不会使用覆盖索引。

    36420

    怎么修改mysql名称_mysql怎么修改名?「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。 本篇文章将和大家讲述如何快速修改mysql名,有同样需要朋友学习一下吧,希望你看后能有所帮助。...mysql修改方法: 具体步骤:打开cmd->输入“mysql -u root -p”->输入密码,进入mysql->输入“alter table rename to/as new_tablename...;” 下面的代码包括了创建过程:#创建结构.这样方式,不仅仅是结构,连带着索引也会同时创建. mysql> create table ts01 like ti_o_sms; Query...OK, 0 rows affected (0.02 sec) #修改语法:alter table old_tablename rename to/as new_tablename; mysql>...alter table ts01 rename to ts01_new; Query OK, 0 rows affected (0.00 sec) mysql> show tables; +——————

    15.9K20

    MySQL InnoDB 共享空间和独立空间

    导读:深入学习MySQL时候总是习惯性和Oracle数据库进行比较。在学习MySQL InnoDB存储结构时候也免不了跟Oracle进行比较。...Oracle数据存储有空间、段、区、块、数据文件;MySQL InnoDB存储管理也类似,但是MySQL增加了一个共享空间和独立空间概念。...默认文件名为:ibdata1 初始化为10M 二、查看数据库空间 mysql> show variables like 'innodb_data%'; 我本地库比较小空间主要由一个文件组成:ibdata1...like "innodb_file_per_table" ON代表独立空间管理OFF代表共享空间管理;(查看单空间管理方式,需要查看每个是否有单独数据文件) 修改数据库空间管理方式...修改innodb_file_per_table参数值即可,但是修改不能影响之前已经使用过共享空间和独立空间; innodb_file_per_table=1 为使用独占空间 innodb_file_per_table

    4K30

    修改名列名mysql_怎么修改mysql名和列名?

    mysql中,可以通过“ALTER TABLE 旧表名 RENAME 新名;”语句来修改名,通过“ALTER TABLE 名 CHANGE 旧字段名/列名 新字段名/列名 新数据类型;”语句来修改列名...修改mysqlMySQL 通过 ALTER TABLE 语句来实现修改,语法规则如下:ALTER TABLE RENAME [TO] ; 其中,TO 为可选参数,使用与否均不影响结果。...,因此修改名称后修改名称前结构是相同。...用户可以使用 DESC 命令查看修改结构, 修改mysql列名(字段名) MySQL 数据是由行和列构成,通常把“列”称为字段(Field),把“行”称为记录(Record)。...MySQL修改表字段名语法规则如下:ALTER TABLE CHANGE ; 其中:旧字段名:指修改字段名; 新字段名:指修改字段名; 新数据类型:指修改数据类型,如果不需要修改字段数据类型

    11.5K20

    【赵渝强老师】MySQL InnoDB空间

    InnoDB存储引擎目前是MySQL默认存储引擎,它主要由三部分组成,分别是:存储结构、内存结构和线程结构。InnoDB存储结构又可以分为逻辑存储结构和物理存储结构。...InnoDB存储引擎逻辑存储结构和Oracle大致相同,所有数据都被逻辑地存放在一个空间中,我们称之为空间(tablespace)。...下面重点介绍一下MySQL InnoDB逻辑存储结构中空间。 空间可以看做是InnoDB存储引擎逻辑结构最高层,所有的数据都是存放在空间中。...12582912 Feb 19 21:11 ibdata1 如果我们启用了参数“innodb_file_per_table”,则每张数据可以单独放到一个空间内。...----------+-------+ 提示:对于启用了innodb_file_per_table参数选项,需要注意是,每张空间内存放只是数据、索引和插入缓冲数据,如撤销(Undo)信息、

    7910

    MySQL结构修改方法

    阅读目录 目的 结构修改基础语法 进阶操作 注意事项 目的 在日常测试工作中,无论测试项目准备阶段还是测试执行阶段,团队成员经常会需要使用SQL语句进行测试数据制作和准备,比较常用就是增删查改等一些基础操作...,但偶尔也会涉及到修改结构极端情况。...结构修改基础语法 如有一张"tb_user_info"结构为: +--------+----------+------+-----+---------+-------+ | Field | Type...30) | YES | | NULL | | +--------+----------+------+-----+---------+-------+ 下面就先做一些基础结构修改操作...,一律为null; 注意当中只剩有一个字段时候无法使用drop进行字段删除; 使用change关键字后,需要指定你要修改字段名以及字段类型; first和 after关键字可用于add与modify

    4.3K10

    InnoDB 空间

    那数据什么时候存储在系统空间,又什么时候存储在独占空间呢? 这个可以通过 MySQL 配置项 innodb_file_per_table 来决定。...该配置项是默认开启,你可以在 MySQL 中通过命令 SHOW VARIABLES LIKE 'innodb_file_per_table' 来查看该变量状态 其实从 MySQL 将独占空间作为默认设置来看...当然,如果没有指定,Undo 空间数据文件就会放在 InnoDB 默认数据目录下,通常来说是 /usr/local/mysql 。...而这两个 Undo 空间数据文件初始大小,在 MySQL 8.0.23 之前是由 InnoDB 页大小来决定,具体情况如下图: 而在 MySQL 8.0.23 之后,Undo 空间初始化大小都是...而在 MySQL 8.0.23 之后,每次最少都要扩容 16 M空间。而且,为了防止数据量爆发式增长,InnoDB 对扩容容量会做一个动态调整。

    60920

    MySQL 核心模块揭秘 | 16 期 | InnoDB

    本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。 正文 1. 概述 MySQL 采用插件化存储引擎,从这个角度,整体结构可以分为两层: server 层。 存储引擎。...我们先把系统变量 autocommit 修改为 OFF: set autocommit = OFF; show variables like 'autocommit'; +-----------...根据代码里描述,DDL 语句修改某个结构过程中,虽然会加元数据锁保证其它事务不会读写这个,但是有两种特殊场景只在 InnoDB 内部实现,不会加元数据锁。 这两种特殊场景如下: 外键检查。...插入记录到同一个多条 insert 语句,如果都需要 MySQL 生成自增字段值,这些语句只能串行执行,这会降低 MySQL 并发能力。...4.3 交错模式 innodb_autoinc_lock_mode = 2,交错模式(interleaved mode)。 这是 MySQL 8.0 默认值。

    21411

    InnoDB优化

    MySQL默认设置AUTOCOMMIT=1 会限制繁忙数据库性能。...MySQL 5.7.10版本,InnoDB XA事务两阶段提交是默认支持,不能设置禁用innodb_support_xa。 行修改或删除后,行数据及undo logs在物理上并没有立刻被变更。...旧数据会保持直到之前启动事务或者并发执行事务完成后。这样,这些食物可以一直访问到相关旧数据。所以耗时事务会阻止 InnoDB 清除其它相关事务数据。 如果一个耗时事务修改或者删除了某些行。...当一个耗时事务修改了某个,其它使用此事务将不会使用覆盖索引。...配置innodb_log_write_ahead_size 变量以避免 “read-on-write”(就是当修改字节不足一个洗系统block时,需要将整个block读进内存,修改对应位置,然后再写进去

    1K30
    领券