[必会]mysql常用函数
max()
min()
sum()
avg()
count()
RAND()
返回0~1的随机数
RAND(x)
返回0~1的随机数,x值相同时返回的随机数相同
CONTACT(s1,s2,…)
将字符串s1,s2等多个字符串合并为一个字符串
CURDATE(),CURRENT_DATE()
返回当前日期,如2016-07-30
CURTIME(),CURRENT_TIME()
返回当前时间,如22:13:41
NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE(),LOCALTIMESTAMP()
返回当前日期和时间
参考网址: https://blog.csdn.net/zhangjintao2012/article/details/52072231
[必会]Mysql数据库的引擎
1、Mysql数据库的引擎有很多种,
最重要的就是他的事务型引擎(innerDB)和非事务型引擎(MyIsam),我们一般都采用他的事务型引擎,
因为增删改操作必须要用到事务;
非事务引擎,可以在做主从复制、读写分离后的从数据库上使用,因为从数据库一般仅仅是读的操作,
不需要事务,这样会更快。
相关录音
[必会]MySQL数据库介绍
MySQL是一款开源的关系型数据库,由瑞典MySQL AB开发,现在属于Oracle旗下产品,
是目前最流行的数据库之一。MySQL可以运行于多个系统,支持多种语言。
相关录音
[必会]数据库锁
行锁,表锁,页锁;乐观锁,悲观锁
行锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高
表锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
悲观锁:
就是考虑问题很悲观,每次去拿数据的时候都认为别人会修改, 所以每次在拿数据的时候都会上锁; 实现:sql语句后边加上forupdate例子:Selectid,namfrombiaoforupdate
乐观锁: 假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。不能解决脏读问题
白话版 : 就是考虑问题很乐观,每次去拿数据的时候都认为别人不会修改,
所以不会上锁
实现:在表里边加一个vesion 例子:Selectmax(nub) ,versionfrombiaoUpdatebiaosetnub=nub+1,version=vsersion+1whereid=idandversion=version
[熟悉]char 和 varchar的区别
char 为定长的字符数据结构(0~255), varchar为可变的字符结构,(0~65535)
例如: 同样设置30长度的 char 字段 和 varchar 字段
如果存储的字符长度为3对于char来说 会通过空补齐剩余空间 而varchar 来说 存储长度就是3, 最大长度为30
相关录音
[必会]MyISAM和InnoDB的区别
InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;
锁机制不同: InnoDB 为行级锁,myisam 为表级锁。
[必会]数据库查询结果怎么去重
使用distinct关键字
相关录音
[熟悉]Mysql的慢查询
什么是mysql的慢查询
mysql支持慢查询日志功能,开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
如何开启慢查询
修改配置文件my.cnf,在[mysqld]下的下方加入
slow_query_log = ON //开启慢查询
slow_query_log_file = /usr/local/mysql/data/slow.log //慢查询日志文件存放位置
long_query_time = 1 //大于多长时间的
设置后 重启MySql的服务
[熟悉]什么是关系型数据库
关系型数据库时建立在关系模型基础上,数据以表格的形式出现,每行为各种记录的名称,
每列为记录名称所对应的数据域,多个行和列组成一个表,多个表组成一张表
相关录音
[熟悉]谈一谈对MySQL InnoDB的认识
特点是:
1、具有较好的事务支持:支持4个事务隔离级别,支持多版本读
2、行级锁定:通过索引实现,全表扫描仍然会是表锁,注意间隙锁的影响
3、读写阻塞与事务隔离级别相关
4、具有非常高效的缓存特性:能缓存索引,也能缓存数据
5、整个表和主键以Cluster方式存储,组成一颗平衡树
6、所有Secondary Index都会保存主键信息
适用场景:
1、需要事务支持(具有较好的事务特性)
2、行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成
3、数据更新较为频繁的场景
4、数据一致性要求较高
5、硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO
相关录音
[必会]varchar2、varchar、char有什么区别?
Char的长度是固定的,而varchar2的长度是可以变化的
比如,存储字符串“abc”对于char(20),表示你存储的字符将占20个字节,包含17个空,
而同样的varchar2(20)只占了3个字节,20只是最大值,当你存储的字符小于20时,按实际长度存储。 -
char的效率要被varchar2的效率高。
目前varchar是varchar2的同义词 工业标准的varchar类型可以存储空字符串,但是oracle不能这样做,尽管它保留以后这样做的权利。 Oracle自己开发了一个数据类型varchar2,这个类型不是一个标准的varchar,他将在数据库中varchar列可以存储空字符串的特性改为存储null值,如果你想有向后兼容的能力,oracle建议使用varchar2而不是varchar
相关录音
[熟悉]如何定位到有问题的sql?
当程序运行慢的时候,我们会根据接口访问的时间(这个我们是通过Aop实现的),
定位到超时时间的接口,然后分析接口的业务,如果接口的业务中有sql的话,在拿出相应的sql做分析。若不是sql的问题,
而是数据的并发量导致数据库慢的话,可以采用mysql的读写分离来解决,因为大多数的场景都是读多,写少的场景,这样主库的写的压力就会减轻很多。
相关录音
[熟悉]mysql的最大连接数
MYSQL慢查询配置
慢查询有什么用? 它能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化.
相关录音
[必会]mysql的数据库导入导出
我们主要使用navcat 对数据库进行导入导出,
如果要导出一个数据库,可以用navcat连接数据库后,转存为一个 XXX.sql的文件,这里面存储了该数据库的所有sql语句。
在另一个数据中需要导入的时候, 右键运行 XXX.sql进行导入
[熟悉]数据库范式
第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。 2 第二范式(2NF) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。 第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式(3NF) 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。(我的理解是消除冗余)
相关录音
[了解]数据库设计
一般在项目中,设计数据库是按这样的顺序,
先从业务中抽象出实体事物,
然后判定实体和实体之间的关联关系, 最后,就可以根据关联关系,设计表
比如一对一,
可以设计A表,B表,
通过主键关联,也可以在B表使用外键aid来关联 比如一对多,
可以设计成A表,B表,B表使用外键aid来关联 比如多对多,可以设计成A表,B表,中间表,中间表是aid,bid. 还有自关联,像部门子部门,分类子分类,菜单子菜单等等,可以使用子关联,放一个pid 另外,在设计表的时候,可能还要注意唯一性字段,排序字段,冗余字段等等,一般在系统也会设计一些基础数据表,系统配置项表,日志表等等。