数据库

Java面试之MySQL

白昼怎懂夜的黑 提交于 2020-03-27 15:31:27
164. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。 第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。 第三范式:任何非主属性不依赖于其它非主属性。 表类型如果是 MyISAM ,那 id 就是 8。 表类型如果是 InnoDB,那 id 就是 6。 165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几? InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。 166. 如何获取当前数据库版本? 使用 select version() 获取当前 MySQL 数据库版本。 167. 说一下 ACID 是什么? Atomicity(原子性):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。 Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。 Isolation(隔离性)

mysql整理

时光怂恿深爱的人放手 提交于 2020-03-27 15:25:23
1.在 mysql 数据库内如何让自动增加字段从0开始 truncate table 表名 2.表中有A B C三列时,用SQL语句实现:当A列大于B列时选择A列,否则选择B列,当B列大于C列时选择B,否则选择C列 select case when A > B then A else B end, case when B > C then B else C end; 3. Redis Redis 是一个 key-value 存储系统。支持五种数据类型: (1) string (字符串) (2) list (列表) (3) hash ( hash 表) (4) set (集合) (5) zset (有序集合) 4. MyISAM 和 InnoDB 的区别 MyISAM 特点 (1)不支持事务、外键 (2)支持表级锁,不支持行级锁 (3)拥有较高的查询效率 InnoDB 特点 (1)支持事务、外键 (2)支持行级锁,并发性更高,需要的花销也更高 如果执行大量的 select , MyISAM 速度更快,如果执行大量的 insert 或 update , InnoDB 速度更快。执行 select count(*) from table 时, MyISAM 只是简单的读出保存好的行数,而 InnoDB 要扫描整个表来计算有多少行,如果执行 select count(*) from

MySQL引擎的和区别

狂风中的少年 提交于 2020-03-27 11:52:03
转载自 https://m.nowcoder.com/tutorial/93/8ac75a692a3b4b0a868796b9f008bc2c MySQL引擎 MySQL中的数据用各种不同的技术存储在文件(或内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧和锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或功能,从而改善你的应用的总体功能。 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 MySQL存储引擎主要有:MyISAM、InnoDB、Memory、Blackhole、CSV、Performance_Schema、Archieve、Federated、Mrg_Myiasm. 但是最常用的是InnoDB和MyISAM。 InnoDB InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。 InnoDB引擎提供了对数据库ACID事务的支持,并且实现了SQL的四种隔离级别。 该引擎还提供了行级锁定和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时InnoDB会在内存中建立缓冲池,用于缓冲数据和索引。 但是该引擎不支持FULLTEXT类型的索引 而且它没有保存表的行数

MySQL 常见面试题

家住魔仙堡 提交于 2020-03-27 10:54:50
MySQL常见的两种存储引擎:MyISAM与InnoDB Mysql索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。 Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。   MyISAM: B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址读取相应的数据记录。这被称为“非聚簇索引”。   InnoDB: 其数据文件本身就是索引文件。相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引(或聚集索引)”。而其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,在走一遍主索引。 因此,在设计表的时候

openfire集成已有数据库

我与影子孤独终老i 提交于 2020-03-27 09:55:02
3 月,跳不动了?>>> 0问题场景 假如我们有一个网站并且已经有了上百万的注册用户,现在要集成一个IM即时聊天功能,假如我们使用开源的xmpp服务器,都会自动生成默认的数据库以及表结构,用已有数据库的用户表去初始化IM服务器的用户表,不仅麻烦而且涉及到同步问题。所以xmpp服务器都提供了集成数据库的功能。我们可以通过配置修改,把登录认证,用户查询,用户分组等信息,从IM服务器的默认数据库剥离出来。tigase目前只支持mysql,pgsql,derby三种数据库集成,openfire支持的比较多。本文讲的是openfire集成oracle。 1官方文档 官方文档: Custom Database Integration Guide 2问题解决 问题一: <jdbcProvider> <driver>com.mysql.jdbc.Driver</driver> <connectionString>jdbc:mysql://localhost/dbname?user=username&password=secret</connectionString> </jdbcProvider> 文档中只提供了mysql的外接数据库连接方式,如果是oracle的数据库就要注意了,按照上面的那种拼接时错误的 Oracle的connectionString的字符串应该是 jdbc:oracle

列式存储数据库

二次信任 提交于 2020-03-27 09:02:56
关系型数据库系统以二维表的形式呈现数据,比如下面的员工表 RowId EmpId Lastname Firstname Salary 001 10 Smith Joe 40000 002 12 Jones Mary 50000 003 11 Johnson Cathy 44000 004 22 Jones Bob 55000 上面的格式仅仅存在于理论和逻辑中,事实上存储设备要求数据序列化为某种形式。 我们知道对于硬盘来说,最昂贵的操作是查找。为了提高最终性能,所需要的相关数据应该以某种方式去存储从而使“查找”操作尽可能少。硬盘由一系列规定大小的块(block)组成, 通常足以容纳数据表的几行。通过把相关的行存储在块中,仅仅一定数量的块需要被读取从而最小化了查找的数量。 行式存储 传统的存储方案是按行序列化数据,如下所示 001:10,Smith,Joe,40000;002:12,Jones,Mary,50000;003:11,Johnson,Cathy,44000;004:22,Jones,Bob,55000; 行式存储系统被设计为以很少的操作就可以返回整行或整条记录。当我们需要获取关于某个特定对象的信息的时候,比如某个用户的联系信息或某件商品信息,这种设计就相当适用。 但是行式存储不适用于对整个数据集的操作。比如,找出工资在40000到50000之间的记录

Mysql 的 长连接? 短连接?

走远了吗. 提交于 2020-03-27 08:25:40
什么是短连接? 短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。短连接简单来说就是每一次操作数据库,都要打开和关闭数据库连接,基本步骤是: 连接 →数据传输 →关闭连接 。 什么是长连接? 长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。 以PHP程序为例,当收到一个永久连接的请求时,PHP将检查是否已经存在一个(前面已经开启了的)相同的永久连接。如果存在,则将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。 从客户端的角度来说,使用长连接有一个好处,可以不用每次创建新连接,若客户端对MySQL服务器的连接请求很频繁,永久连接将更加高效。对于高并发业务,如果可能会碰到连接的冲击,推荐使用长连接或连接池。 从服务器的角度来看,情况则略有不同,它可以节省创建连接的开销,但维持连接也是需要内存的。如果滥用长连接的话,可能会使用过多的MySQL服务器连接。现代的操作系统可以拥有几千个MySQL连接,但很有可能绝大部分都是睡眠(sleep)状态的,这样的工作方式不够高效,而且连接占据内存,也会导致内存的浪费。 对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库

关于spring MVC的面试题

混江龙づ霸主 提交于 2020-03-27 07:30:26
MVC设计模式 M model 模型 model包括service处理业务逻辑,entity实体类封装数据,dao操作数据库,utils工具类 service层主要用来处理业务逻辑,service层的一些公共处理可以使用spring框架的AOP来完成,比如,日志信息,事物的处理 Spring是一个框架,结合了java中多种优秀设计模式形成的一个企业级解决方案 IOC :控制反转,将对象的创建与属性的赋值交给Spring框架完成,将控制权由程序员交给Spring框架这就是控制反转,IOC主要运用的是Java中的工厂设计模式,将要创建对象的类交给Spring工厂,需要时直接去工厂中取 DI: DI和IOC本质相同说法不同,DI依赖注入,通过属性的set方法或者类的构造方法为属性赋值 AOP:面向切面编程,是对OOP面向对象编程的一种补充,主要运用的是Java中代理设计模式,代理设计模式又分为静态代理和动态代理 静态代理和动态代理的区别:静态代理在代码编译时代理类就产生了,动态代理是在代码运行期才会产生代理类,在运行期JDK底层会动态的生成代理类,并创建代理对象 Spring的事务处理: 事务处理由Spring框架的声明式事务处理完成 Spring框架创建对象的创建次数 : Bean标签的scope属性可以设置对象的创建次数,为singleton时这个对象时单例的只会创建一次

行式数据库与列式数据库的对比

╄→尐↘猪︶ㄣ 提交于 2020-03-27 07:19:21
导语:随着大数据的发展,现在出现的列式存储和列式数据库。它与传统的行式数据库有很大区别的。 正文: 行式数据库 是按照行存储的,行式数据库擅长随机读操作不适合用于大数据。像SQL server,Oracle,mysql等传统的是属于行式数据库范畴。 列式数据库 从一开始就是面向大数据环境下数据仓库的数据分析而产生。 数据库以行、列的二维表的形式存储数据,但是却以一维字符串的方式存储,例如以下的一个表: EmpId Lastname Firstname Salary 1 Smith Joe 40000 2 Jones Mary 50000 3 Johnson Cathy 44000 这个简单的表包括员工代码(EmpId), 姓名字段(Lastname and Firstname)及工资(Salary). 这个表存储在电脑的内存(RAM)和存储(硬盘)中。虽然内存和硬盘在机制上不同,电脑的操作系统是以同样的方式存储的。数据库必须把这个二维表存储在一系列一维的“字节”中,由操作系统写到内存或硬盘中。 行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。 1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000; 列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。 1,2,3

[转帖]支付宝自研数据库OceanBase全球开放!淘汰甲骨文

假如想象 提交于 2020-03-27 06:45:29
支付宝自研数据库OceanBase全球开放!淘汰甲骨文 https://news.cnblogs.com/n/658420/ 3 月 25 日,支付宝官方宣布,自研的金融级分布式数据库 OceanBase 正式通过阿里云向全球开放,能提供高可用、高性能、低成本的计算服务,企业可在云上获得“支付宝同款”的世界顶级数据库处理能力。   数据库和操作系统一样,是 IT 行业的重要基础软件,也是“核高基”中的“基础软件产品”之一,但是多年来,我国企业长期依赖于国外数据库技术,尤其是 Oracle 甲骨文,成为一座难以逾越的大山。   据了解,阿里巴巴、支付宝 2010 年起开始自主研发数据库系统 OceanBase,目标就是来取代甲骨文等传统数据库。   2016 年,OceanBase 在支付宝核心系统中全面替换甲骨文,支撑几亿人随时随地网购、移动支付,2019 年双 11 活动期间又创造了 6100 万次/秒的数据库处理峰值。   2019 年 10 月 2 日,在数据库领域的全球顶级比赛 TPC-C 测试中,OceanBase 以两倍于第二名的优势成绩,打破了甲骨文保持 9 年之久的世界记录,也拿下了首个中国冠军。   据介绍,OceanBase 数据库可实现数千亿条记录、数百 TB 数据的跨行跨表事务,代码完全可控,可实现城市级容灾,集群中少数派故障时数据不丢,服务不停。