InnoDB

SQL与MySQL基本

余生颓废 提交于 2020-12-18 19:13:58
一:概念辨析 数据库(database):是一种保存有组织的数据的容器。 数据库软件(DBMS):使用DBMS操作数据库、访问数据库。 SQL:结构化查询语言,专门用来与数据库通信的语言。几乎所有DBMS都支持SQL,用以操作数据库。但是不同DBMS实现的sql不完全相同。 MySQL:MySQL是一种DBMS,是一种数据库软件。通过它我们可以创建、操作数据库,可以执行SQL语句进行数据库信息的增删查改。 客户端与服务器:DBMS基于客户端——服务器模式。 服务器 软件运行在担任数据库服务器的计算机上, 负责所有数据访问与处理 。而关于数据处理的请求则是来自客户端, 客户端可以是MySQL的命令行工具、可视化操作工具、脚本语言、程序设计语言等 。 二:MySQL前期操作 1:连接到数据库服务器 通过 主机名、端口、用户名、口令 来连接到数据库服务器。 mysql -u 用户名 -p 2:选择数据库 USE 数据库名; 3:显示数据库 show databases; 4:获取一个数据库中所有表 show tables; 5:显示一个表中所有列 SHOW COLUMS FROM 表名; 6:显示服务器状态信息 SHOW STATUS; 7:显示用于权限 SHOW GRANTS 8:显示警告或错误信息 SHOW ERRORS SHOW WARNINGS 三

必看!PHP常见面试题——MySQL篇(一)

怎甘沉沦 提交于 2020-12-18 12:55:35
1. 说说自己对于 MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解? InnoDB 引擎: InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count() from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。 MyIASM 引擎: MySQL 的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count() from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。 2. 谈谈你对MySQL索引的理解? MySQL索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表

mysql面试题总结

橙三吉。 提交于 2020-12-18 07:38:55
Mysql中的myisam与innodb的区别? InnoDB存储引擎的四大特性? 什么是事务? 数据库事务的四大特性? 不考虑事务的隔离性,会发生几种问题? MySQL数据库提供的四种隔离级别? 有多少种日志? 事务是如何通过日志来实现的? 数据库的乐观锁和悲观锁是什么? 什么是存储过程?有哪些优缺点? 存储过程与触发器的区别? 索引是什么?有什么作用以及优缺点? 说一说 MySQL 数据库几个基本的索引类型? 使用索引查询一定能提高查询的性能吗?为什么? 为数据表建立索引的原则有哪些? 什么情况下应不建或少建索引? 什么是mysql联合索引? 说一说 B+树索引、哈希索引? B树和B+树的区别? 为什么说B+比B树更适合实际应用中操作系统的文件索引和数据库索引? 聚集索引和非聚集索引区别? 说一说 drop、 delete 与 truncate 的区别? drop、 delete 与 truncate 分别在什么场景之下使用? 超键、候选键、主键、外键分别是什么? mysql为什么用自增列作为主键? MySQL中的varchar和char的区别以及varchar(50)中的50代表的涵义? 什么是视图?视图的使用场景有哪些? 数据库三大范式? sql优化 非关系型数据库和关系型数据库区别,优势比较? 什么是 内连接、外连接、交叉连接、笛卡尔积等? SQL语言分类 like %和

MySQL面试总结

假如想象 提交于 2020-12-18 07:01:35
MySQL面试总结 # MySQL的存储引擎 `MyISAM`(默认表类型):非事务的存储引擎,基于传统的`ISAM`(有索引的顺序访问方法)类型,是存储记录和文件的标准方法,不是事务安全,不支持外键,适用于频繁的查询。表锁,不会出现死锁,适合小数据和小并发。 - 为什么不会出死锁?(没有事务就不会继续持有锁) 答:因为`MyISAM`再查询的时候,会同时锁定这个`sql`里面所有用到的表(获取锁的顺序是一致的),不局限与一张表,再写锁又重叠时,就得等待。 **注意:【`MySQL5.5`之前默认的是`MyISAM`引擎了,5.5之后的版本默认都是`innodb`作为存储引擎】** `innodb`:支持事务安全的存储引擎,适用于插入和更新,支持外键,行锁,事务。适合大数据,大并发。特别是针对多个并发和`QPS`较高的情况。 - `QPS:`就是每秒查询率,`QPS`是对一个特定服务器再规定时间内能处理多少流量的衡量标准。 - `TPS:`就是每秒传输处理的事务个数。 - `innodb`的行锁模式:共享锁,排他锁,意向共享锁(表锁),意向排他锁(表锁),间隙锁。(注意:如果`sql`语句没有使用索引,`innodb`不能确定操作的行时,使用意向锁(表锁))。 - 死锁问题 - 什么是死锁? 死锁就是当俩个事务都需要获取对方持有的排他锁才能完成事务的时候,就导致了循环锁等待

java 乐观锁 vs 悲观锁

感情迁移 提交于 2020-12-18 06:47:36
在 数据库的锁机制 中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。 悲观锁其实就是 完全同步 比如 synchronized 关键字 或 ReentrantLock 乐观锁就是不用同步,用数据库表的一个版本字段来控制,写操作之前 判断当前的版本与数据库中最新版本是否一致,如果不一致重新获取再执行写操作。 转自: http://www.hollischuang.com/archives/934 乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。 无论是悲观锁还是乐观锁,都是人们定义出来的概念,可以认为是一种思想。其实不仅仅是关系型数据库系统中有乐观锁和悲观锁的概念,像memcache、hibernate、tair等都有类似的概念。 针对于不同的业务场景,应该选用不同的并发控制方式。所以,不要把乐观并发控制和悲观并发控制狭义的理解为DBMS中的概念,更不要把他们和数据中提供的锁机制(行锁、表锁、排他锁、共享锁)混为一谈。其实,在DBMS中,悲观锁正是利用数据库本身提供的锁机制来实现的。 下面来分别学习一下悲观锁和乐观锁。 悲观锁 在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”

三万字打造 91 道 MySQL 面试题【建议收藏】

戏子无情 提交于 2020-12-18 03:18:08
原 文: https://blog.csdn.net/ThinkWon/article/details/104778621 数据库基础知识 1. 为什么要使用数据库 数据保存在内存 优点:存取速度快 缺点:数据不能永久保存 数据保存在文件 优点:数据永久保存 缺点:1)速度比内存操作慢,频繁的IO操作。2)查询数据不方便 数据保存在数据库 1)数据永久保存 2)使用SQL语句,查询方便效率高。 3)管理数据方便 2. 什么是SQL? 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。 作用:用于存取数据、查询、更新和管理关系数据库系统。 3. 什么是MySQL? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。 4. 数据库三大范式是什么 第一范式:每个列都不可以再拆分。 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。 第三范式:在第二范式的基础上

【建议收藏】MySQL 三万字精华总结 —索引(二)

核能气质少年 提交于 2020-12-18 03:17:45
四、索引 ❝ 说说你对 MySQL 索引的理解? 数据库索引的原理,为什么要用 B+树,为什么不用二叉树? 聚集索引与非聚集索引的区别? InnoDB引擎中的索引策略,了解过吗? 创建索引的方式有哪些? 聚簇索引/非聚簇索引,mysql索引底层实现,为什么不用B-tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方? MYSQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,所以说 索引的本质是:数据结构 索引的目的在于提高查询效率,可以类比字典、 火车站的车次表、图书的目录等 。 可以简单的理解为“排好序的快速查找数据结构”,数据本身之外, 数据库还维护者一个满足特定查找算法的数据结构 ,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。下图是一种可能的索引方式示例。 左边的数据表,一共有两列七条记录,最左边的是数据记录的物理地址。 为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值,和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度内获取到对应的数据,从而快速检索出符合条件的记录。 索引本身也很大,不可能全部存储在内存中, 一般以索引文件的形式存储在磁盘上 平常说的索引,没有特别指明的话

【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四)

不羁岁月 提交于 2020-12-18 03:12:03
七、MySQL锁机制 ❝ 数据库的乐观锁和悲观锁? MySQL 中有哪几种锁,列举一下? MySQL中InnoDB引擎的行锁是怎么实现的? MySQL 间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的 sql 语句,死锁发生了如何解决,MySQL 有没有提供什么机制去解决死锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。 打个比方,我们到淘宝上买一件商品,商品只有一件库存,这个时候如果还有另一个人买,那么如何解决是你买到还是另一个人买到的问题?这里肯定要用到事物,我们先从库存表中取出物品数量,然后插入订单,付款后插入付款表信息,然后更新商品数量。在这个过程中,使用锁可以对有限的资源进行保护,解决隔离和并发的矛盾。 锁的分类 从对数据操作的类型分类 : 读锁 (共享锁):针对同一份数据,多个读操作可以同时进行,不会互相影响 写锁 (排他锁):当前写操作没有完成前,它会阻断其他写锁和读锁 从对数据操作的粒度分类 : 为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但是管理锁是很耗资源的事情

Impossible WHERE noticed after reading const tables

自古美人都是妖i 提交于 2020-12-18 01:57:11
阿里云反馈的慢SQL,执行计划返回如下:Impossible WHERE noticed after reading const tables sql很简单: SELECT * FROM deposit_transaction WHERE request_Id = ' XXX ' 而且该表的request_id创建了唯一索引:很明显,这个字段是保持幂等操作的,通过数据库的唯一索引实现; 每次数据落地前,都要执行该SQL查询是否记录存在,而数据库做幂等兜底; 如果request_id不存在,竟然没有走request_id的唯一索引.... 问题是: 基本99.99%的查询,肯定数据库不存在呀! 可是,mysql的innoDB引擎,主键查询或者唯一性索引查询,如果这条数据没有的话,它会 全表扫描 ,然后得出一个结论,该数据不在表中。 对于高并发的库来说,这条数据,会让负载特别的高 。 所以: 高并发系统,建议通过缓存做幂等校验,数据库唯一索引兜底!或者直接通过数据库的唯一索引兜底 ! 普通系统,并发小,数据量又不大,那就查询一把呗,IO高,可是不影响嘛!!! 来源: oschina 链接: https://my.oschina.net/u/4381494/blog/3603220

内连接、左连接、右连接区别

左心房为你撑大大i 提交于 2020-12-18 01:11:49
这里分享一下数据库各种连接。 首先用navicat创建数据库 创建表A, B,sql同理 CREATE TABLE `A` ( `Aid` int(10) NOT NULL DEFAULT 1 COMMENT '主键' , `Aname` varchar2, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci ROW_FORMAT=DEFAULT ; 用select* from A出来的记录情况如下图1所示: 即用select* from B出来的记录情况如下图2所示: A和B的关系如图: 内连接(Inner JOIN): Select* from A JOIN B ON A.Aid=B.Bnameid 或:select* from A,B where A.Aid=B.Bnameid 运行效果 左连接(Left JOIN): select* from A Left JOIN B ON A.Aid=B.Bnameid 运行效果 右连接(Right JOIN): select* from A Right JOIN B ON A.Aid=B.Bnameid 运行效果 本文分享自微信公众号 - 国产程序员(Monday_lida)。 如有侵权,请联系 support