,Mysql InnoDB和MyISAM的区别?

用户投稿 59 0

关于“php_mysql_innodb”的问题,小编就整理了【4】个相关介绍“php_mysql_innodb”的解答:

Mysql InnoDB和MyISAM的区别?

InnoDB和MyISAM都是MySQL的不同存储引擎,它们的主要区别是: 

1. 事务支持:InnoDB支持事务,MyISAM不支持事务。InnoDB可以保证数据的ACID。 

2. 外键支持:InnoDB支持外键约束,MyISAM不支持外键约束。 

3. 数据领域:InnoDB支持行级锁,允许同时访问不同行数据,MyISAM使用表级锁,不允许同时访问。所以InnoDB适合高并发环境。 

4. 压缩和回收:InnoDB支持数据压缩和回收,可以节省磁盘空间。MyISAM不支持。

5. 复制:InnoDB支持论坛复制,不支持其他复制方式。MyISAM支持更多的复制方式,如binlog复制。 

6. 回滚和消毒:InnoDB支持事务回滚和消毒,MyISAM不支持。 

7. 空间利用:InnoDB会产生额外的空间被占用,MyISAM更紧凑。 

在使用场景上: InnoDB适合于事务处理类型的系统,支持外键约束和更强的 ACID 特性,更高的并发度,更耗费空间。MyISAM 空间利用更高,性能也更高,更简单,不支持事务和外键。所以在数据安全和一致性要求高的地方使用InnoDB,性能要求高的地方使用MyISAM。也有部分可以进行结合,使用不同存储引擎的优势。

mysql的innodb添加了事务为什么还会出现数据丢失问题?

会话的隔离级别设置为serializable的时候,其他会话对该表的写操作将被挂起;但是还是可以读取数据的,因此根据读取的数据做更新还可能会有问题。应用程序中为了防止核心数据被并发修改,一般在查询数据的语句中增加for update的选项,从数据库层面避免造成同一条数据被两个事务同时进行操作。

如何修改MySQL数据库引擎为INNODB?

修改MySQL数据库引擎为INNODB:

1、首先修改my.ini,在[mysqld]下加上:default-storage-engine=INNODB2、用sql语句修改已经建成表的引擎:altertable待改表明type=InnoDB;

MysqlInnoDB删除数据后释放磁盘空间的方法?

Innodb数据库对于已经删除的数据只是标记为删除,并不真正释放所占用的磁盘空间,这就导致InnoDB数据库文件不断增长。

如果在创建数据库的时候设置innodb_file_per_table=1,这样InnoDB会对每个表创建一个数据文件,然后只需要运行OPTIMIZE TABLE 命令就可以释放所有已经删除的磁盘空间。

运行OPTIMIZE TABLE 表名后,虽然较后会报Table does not support optimize, doing recreate + analyze instead,但其实已经成功了:)-------------------------------------------------------------如果没有设置这个参数,又想释放空间,彻底释放这些已经删除的数据,需要把数据库导出,删除InnoDB数据库文件,然后再倒入。下面是基本的步骤:

1 使用mysqldump命令将InnoDB数据库导出2 停止MySQL3 删除所有InnoDB数据库文件和日志4 启动MySQL并自动重建InnoDB数据库文件和日志文件5 导入前面备份的数据库文件# 备份数据库:mysqldump -uroot -proot --quick --force --all-databases > mysqldump.sql# 停止数据库service mysqld stop# 删除这些大文件rm /usr/local/mysql/var/ibdata1rm /usr/local/mysql/var/ib_logfile*# 手动删除除Mysql之外所有数据库文件夹,然后启动数据库service mysqld start# 还原数据mysql -uroot -proot < mysqldump.sql

到此,以上就是小编对于“php_mysql_innodb”的问题就介绍到这了,希望介绍关于“php_mysql_innodb”的【4】点解答对大家有用。

抱歉,评论功能暂时关闭!