加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

InnoDB 存储引擎详解

发布时间:2023-09-05 12:57:48 所属栏目:MySql教程 来源:
导读:本小节重点介绍常用存储引擎的对比,以及 InnoDB 存储引擎。

InnoDB 是MysqL的默认事务性引擎,也是最重要、使用最广泛的存储引擎。InnoDB 具有提交、回滚、自动崩溃恢复的事务安全保障,拥有独立的缓存和日志,提
本小节重点介绍常用存储引擎的对比,以及 InnoDB 存储引擎。

InnoDB 是MysqL的默认事务性引擎,也是最重要、使用最广泛的存储引擎。InnoDB 具有提交、回滚、自动崩溃恢复的事务安全保障,拥有独立的缓存和日志,提供行级别的锁粒度和强大的并发能力。

在大多数使用场景中,包括事务型和非事务型存储需求,InnoDB 都是更好的选择,除非有非常特别的原因需要使用其他存储引擎。

InnoDB 表的自动增长列,插入的值可以为空,也可以人工插入,如果插入的值为空,则实际插入的值是自动增长后的值。

下面定义表 t1,字段 c1 为自动增长列,对该表进行 insert 操作,可以发现,当插入值为空时,实际插入的值是自动增长后的值。

MysqL> create table t1(
    ->      int not null auto_increment,
    ->      varchar() default null,
    ->     primary key()
    -> ) engine = innodb;
Query OK,  rows affected ( sec)
MysqL> insert into t1(,) values(null,'1'),(,'2');
Query OK,  rows affected ( sec)
Records:   Duplicates:   Warnings: 
MysqL> select * from t1;
+----+------+
|  |    |
+----+------+
|   |     |
|   |     |
+----+------+
 rows in set ( sec)
InnoDB中,自增长列必须是索引,同时必须是索引的第一个列 。如果不是第一个列,数据库会报出异常

MysqL> create table t2(
    ->      int not null auto_increment,
    ->      varchar() default null,
    ->     key(,)
    -> ) engine = innodb;
ERROR  (): Incorrect table deFinition; there can  only one auto column and it must  defined as  key
MysqL> create table t2(
    ->      int not null auto_increment,
    ->      varchar() default null,
    ->     key(,)
    -> ) engine = innodb;
Query OK,  rows affected ( sec)

主键和索引

InnoDB 表是基于聚簇索引建立的,聚簇索引也叫主索引,也是表的主键,InnoDB 表的每行数据都保存在主索引的叶子节点上。InnoDB 表必须包含主键,如果创建表时,没有显式指定主键,InnoDB 会自动创建一个长度为 6 个字节的 long 类型隐藏字段作为主键。所有的 InnoDB 表都应该显式指定主键。

InnoDB 表中,除主键之外的索引,叫做二级索引。二级索引必须包含主键列,如果主键列很大的话,其他的所有索引都会很大。因此,主键是否设计合理,对所有的索引都会产生影响。

一般来说,主键的设计原则大致如下:
满足唯一和非空约束;
主键字段应尽可能地小;
主键字段值基本不会被修改;
优先考虑自增字段,或查询最频繁的字段。
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章