mysql常见的存储引擎

1.什么是存储引擎

   不同的技术以及配套的相关功能在 MySQL中被称作存储引擎。存储机制、索引技巧、锁定水平等等。

2.常见操作

  查看默认存储引擎

    show variables like '%engine%';

  查看数据库支持的存储引擎

    show engines \G;

    show variables like 'have%';  #DISABLED表示被禁用

3.常用索引

  myisam

    不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表

    每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:

      .frm(存储表定义)

      .MYD(MYData,存储数据)

      .MYI(MYIndex,存储索引)

    数据文件和索引文件可以放置在不同的目录,平均分配IO,获取更快的速度,临时解决空间不足问题

    表损坏后,不能被访问,数据库异常重启

    CHECK TABLE语句来检查MyISAM表的健康,并用REPAIR TABLE语句修复一个损坏到MyISAM表

    3种不同的存储格式:

      静态(固定长度)表

        存储非常迅速,容易缓存,出现故障容易恢复

        缺点是占用的空间通常比动态表多

        宽度定义补足空格

      动态表

        动态表包含变长字段,记录不是固定长度的,这样存储的优点是占用空间较少

        频繁的更新删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,并且出现故障的时候恢复相对比较困难

      压缩表

        myisamchk工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支

  InnoDB

支持事务安全,写效率差,占用更多的磁盘空间保留数据和索引

自动增长列

InnoDB表的自动增长列可以手工插入,但是插入的值是空或者0,则实际插入的将是自动增长后的值

last_insert_id() 查询当前线程最后插入记录使用值,如果一次插入多条记录,返回的是第一条记录使用的自动增长值

自动增长列必须是索引,如果是组合索引的话,必须是组合索引的第一列

外键约束

只有InnoDB支持索引,创建外键时,要求父表必须有对应的索引,子表也会对应创建对应的索引

删除、更新父表时,对子表进行相应的操作,restrict、cascade、set null和no action

restrict,no action子表有关联的情况下,父表不能更新

cascade  父表在更新或者删除时,更新或者删除子表对应的记录

set null  父表在更新或者删除时,子表对应的子段被set null

导入多表数据时,暂停外键检查

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

MySQL数据库表设计规范

一、数据库设计1、一般都使用INNODB存储引擎,除非读写比率<1%,才考虑使用MYISAM存储引擎;其他存储引擎请在DBA的建议下使用。2、Storedprocedure(包括存储过程,函数,触发器)对于MYSQL来说还不是很成熟,没有完善的出错记录处理,不建议使用。3、UUID(),USER()这样的

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0