-- 查看当前数据库支持的存储引擎
SHOW ENGINES;
-- VALUE为disable的记录表示支持该引擎,但是数据库启动时被禁用
show VARIABLES LIKE 'have%';

从mysql 5.5版本开始,innodb是mysql默认的存储引擎,下面详细介绍InnoDB存储引擎


1  自动增长序列

InnoDB的自动增长列可以手工插入,但是插入的值如果是空或者是0,则实际插入的将是自动增长后的值。下面定义新表,其中i使用自动增长序列,对表进行插入记录,然后查看自动增长列的处理情况

create table autoincre_demo(i SMALLINT NOT NULL auto_increment,NAME VARCHAR(10),PRIMARY KEY(i)
)ENGINE=INNODB;
INSERT INTO autoincre_demo VALUES(1,'1'),(0,'2'),(NULL,'3');
SELECT * FROM autoincre_demo;                                                                                                           

t

可以使用last_insert_id()来返回当前线程最后插入记录使用的值,如果一次性插入多条数据,则返回插入的第一条记录所使用的字段增长值。可以使用alter table *** auto_increment=n 来强制设置自动增长列的初始值。默认从1开始,但是该强制的默认值是保留在内存中的,如果使用该值在使用之前数据库重新启动,这个强制的默认值就会丢失,需要在数据库启动后重新设置

对于InnoDB表,自动增长序列必须是索引。如果是组合索引,也必须是组合索引的第一列。对于MyISAM表,自动增长序列可以是组合索引的其他列


2   外键约束

Mysql支持外键约束的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键时也会自动创建对于的索引

use test01;
CREATE TABLE country(country_id SMALLINT UNSIGNED NOT NULL auto_increment,country VARCHAR(50) NOT NULL,last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (country_id)
)ENGINE=INNODB DEFAULT charset=utf8;CREATE TABLE `city` ( `city_id` smallint(5) unsigned NOT NULL auto_increment,`city` varchar(50) NOT NULL,`country_id` smallint(5) unsigned NOT NULL, `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`city_id`), KEY `idx_fk_country_id` (`country_id`),CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`country_id`) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into country(country_id, country) values(1, "china");
insert into city(city_id, city, country_id) values(200, "wenzhou", 1); SELECT * from country WHERE country_id = 1;
SELECT * from city WHERE country_id =1;
-- 执行删除语句报错。不能删除
DELETE FROM country where country_id=1;
-- 可以update,执行这条语句时,字表city的country_id字段也被修改。
-- CASCADE 表示父表在更新或者删除时,子表对应记录也被更新或者删除
-- set null 表示如果父表进行更新或删除操作,子表对应字段被set NULL
-- RESTRICT 和no action 相同,限制子表有关联记录情况下父表不能更新
update country set country_id =1 WHERE country_id =1000;

InnoDB 存储引擎具有提交、回滚和奔溃事回复能力的事物安全,但是对比MyISAM的存储引擎,InnoDB写的处理效率差些,并且会占用更多的磁盘空间以保留数据和索引。

InnoDB的存储方式有两种:一是使用共享表空间存储,这种方式创建的表的表结构报存在.frm文件中,数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件

二是使用多表空间存储,这种方式创建的表的表结构依然保存在.frm中,但每个表的数据和索引都单独保存在.idb中,这里就先介绍这么多。等以后用到再详细介绍!即使在多表空间的存储方式下,共享表空间依然是必须的,InnoDB把内部数据词典和在线重做日志放在这个文件中

转载于:https://www.cnblogs.com/sunnybowen/p/9949570.html

Mysql(8)_存储引擎之InnoDB相关推荐

  1. MySQL数据库MyISAM存储引擎转为Innodb

    之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导致了用户连接网站时超时而返回502,于是决定把存储引擎转 ...

  2. mysql 修改时间段内_详解mysql数据库MyISAM存储引擎如何转为Innodb及其中的注意点...

    概述 mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Inno ...

  3. MySQL 两种存储引擎:MyISAM与InnoDB对比及理解

    MySQL 两种存储引擎:MyISAM与InnoDB对比及理解 目前MySQL默认的存储引擎是InnoDB 现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如 ...

  4. MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引 ...

  5. mysql 内存引擎_MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引 ...

  6. mysql的常用存储引擎_MySQL常见的三种存储引擎

    Ok,我们知道了,引擎就是一个程序的核心组件. 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有O ...

  7. MySQL 架构组成—存储引擎

    博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! MySQL Server 系统架构 上图 ...

  8. MySQL事务与存储引擎相关设置

    MySQL事务与存储引擎 一.事务的ACID特点 1.原子性 2.一致性 3.隔离性 4.持久性 二.事务之间的互相影响 三.事务的四大隔离 四.事务控制语句 示例 1.开启.提交事务 2.事务回滚 ...

  9. MySQL常见的存储引擎的区别?

    在MySQL中的存储引擎有很多种,可以通过"SHOW ENGINES"语句来查看.比较常见的是InnoDB.MyISAM.MEMORY这三种. 1.InnoDB存储引擎 InnoD ...

  10. Mysql三种存储引擎及区别

    存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分.不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储.我们可以根据数据 ...

最新文章

  1. python使用教程pandas-python之pandas简单介绍及使用(一)
  2. java cache详解,Java内存缓存详解
  3. 读锁调度导致高延迟的 case 一例
  4. 高等数学下-赵立军-北京大学出版社-题解-练习11.3
  5. 【Java】字符串转换为数字:Integer的parseInt方法
  6. 百度小程序html转码,百度小程序全局配置
  7. python的基本功能_二.Python的基本数据类型及常用功能
  8. Qt编写echart仪表盘JS交互程序支持webkit和webengine(开源)
  9. narwal无法连接机器人_库卡机器人控制系统主机出现MFC3故障维修
  10. tcga数据下载_TCGA数据下载-GDC
  11. [leetcode]746. 使用最小花费爬楼梯
  12. 基于简单的路径压缩的并查集算法
  13. android finish 判断当前_Android开发,源码分析finish()和onBackPressed()的区别
  14. mate 10android o主题,懒萌可爱皮卡丘全局手机主题-适配华为EMUI10.0
  15. R语言处理时间序列数据
  16. FAT32/exFAT/NTFS,三种U盘格式的区别
  17. C#基于FFmpeg实现录屏功能
  18. Word入门教程之插入文字批注(转)
  19. 软件测试工程师必备技能
  20. 基于51单片机的烟雾温度火灾报警器 LCD1602显示proteus仿真

热门文章

  1. Leetcode199二叉树的右视图(宽搜)
  2. 简述旋转编码器的工作原理_绝对值编码器工作原理以及故障处理方法有哪些?...
  3. 十四、final关键字
  4. springboot2.x 集成百度 uidgenerator
  5. LayaAir 缓动动画
  6. TCP 理论概述与 Java 编码入门
  7. 阶段3 2.Spring_07.银行转账案例_1 今日课程内容介绍
  8. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_12_练习_文件复制...
  9. JS 正则表达式基础
  10. POJ 1236 Network of Schools (校园网)