linux、mysql

linx常用指令

  1. type:查询命令 是否属于shell解释器
  2. help : 帮助命令
  3. man : 为所有用户提供在线帮助
  4. ls : 列表显示目录内的文件及目录-l 以长格式显示文件和目录的列表-a 显示所有子目录和文件的信息-A 与-a基本类似,但有两个特殊的隐藏目录‘.’和’…'不显示-d 显示目录本身的属性,长与-l同时使用-h 以更人性化的方式显示目录或文件的大小,长与-l同时使用-R 以递归的方式显示目录及其子目录中的所有内容
    5.du:显示每个文件和目录的磁盘使用空间—文件的大小
    df:显示磁盘分区上可以使用的磁盘空间
  5. touch: 创建空文件,用于测试
  6. mkdir : 创建目录-p 一次性创建嵌套的多层目录-v 显示详情-m 跳出当前的umask
  7. cp: 复制文件或目录-f 覆盖同名文件或目录,强制复制-i 提醒用户确认-r 递归复制
  8. rm :删除指定的文件或目录-f 不提示,直接强制删除-i 提示用户确认-r 递归式删除整个目录树
  9. mv :将制定文件或目录转移位置(剪切),如果目标位置与原位置相同,则相当于执行重命名操作
  10. which : 查找Linux命令程序所在的位置
  11. find : 精细查找文件或目录-name 按名称查找 eg: find /etc -name “resol*.conf”-size
  12. pwd :查看当前路径
  13. stat : 查看文件详细状态信息
  14. cat : 查看文件内容,可同时显示多个文件的内容(正序显示)
  15. head:查看文件开头的一部分内容,默认显示10行,可加选项调节【root@www~】#head -5 /etc/passwd (显示pass文档文件 的前五行)
  16. tail :查看文件结尾的一部分内容
  17. wc:统计文件中的单词数量-l 统计行数-w:统计单词个数-c:统计字节数【root@www~】#wc /etc/hosts2 10 158 /etc/hosts (行数,单词数,字节数)
  18. grep :在文件中查找并显示包含指定字符串的行-i : 查找时忽略大小写-v:反转查找,输出与条件不符的行 “^…”表示以…开头 “…KaTeX parse error: Expected group after '^' at position 12: ”表示以...结尾 “^̲”表示空行eg:【root@www~】#grep -v “^#” /etc/yum.conf | grep -v “^$” ( 过滤掉以“#”开头的注释行及空行)
  19. egrep:增强型过滤 (等同于 grep -E )
  20. gzip:压缩 (压缩后文件格式为 “.gz”)
  21. gzip -d :解压缩格式为.gz 的压缩文件
  22. bzip2: 压缩 (压缩后文件格式为 “.bz2”)
  23. bzip2 -d :解压缩格式为 .bz2 的压缩文件
  24. vim :vi编辑器的增强版
    模式切换: a 在光标后插入内容A 在光标所在的行末尾插入内容i 从当前光标前插入内容l 在光标所在行行首插入内容o 在当前光标下插入空行O 在当前光标上插入空行
  25. yum安装:yum -y install 软件名卸载:
  26. reboot重启命令
  27. sync 同步数据
  28. .echo回显
  29. sleep 休眠
  30. useradd : 添加用户账号 命令useradd [选项】 用户名-u :指定uid标记号-d:指定宿
  31. ps-A:显示所有进程信息
  32. netstat:查看端口
  33. netstat -tunlp|grep 端口号:查看指定端口被哪个进程占用的情况

mysql

创建新表:
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],…)
删除新表
drop table tabname
添加字段并设置默认值
alter table Student add fee int not null default 15
–表名–添加的字段名 --字段类型–是否为空–默认值
添加主键
Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
创建索引
create [unique] index idxname on tabname(col….)
删除索引:drop index idxname on tabname
注:索引是不可更改的,想更改必须删除重新建。
创建视图
create view viewname as select statement
删除视图:drop view viewname
自增长是auto_increment
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ (所有包含‘value1’这个模式的字符串)—like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count(*) as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1[separator]
检索限制行数:select 列名 from 表名 limit 数量;/*返回不多于几行的数据
检索指定行数:select 列名 from 表名 limit (m,n);/*返回从第m行开始的n行
limit (page-1)*size,size;
group by用于对查询的结果进行分组统计
having 用于限制分组显示的结果
select avg(列名),max(列名) ,列名x from 表名 group by 列名x having avg(列名)>2000;
显示 >2000 的组

1.事务四大特性

原子性:要么执行,要么不执行,也就是不可再分,已经最小了。
隔离性:所有操作全部执行完以前其它会话不能看到过程。
一致性:事务前后,数据总额一致。
持久性:一旦事务提交,对数据的改变就是永久的

2.数据库隔离级别

数据库隔离级别
多个并发的事务同时访问一个数据库时:
脏读:事务B读取事务A还没有提交的数据
不可重复读:两次事务读的数据不一致
幻读:事务A修改了数据,事务B也修改了数据,这时在事务A看来,明明修改了数据,咋不一样,
一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读。
幻读和不可重复读都是读取了另一条已经提交的事务(这点同脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

数据库的隔离级别:
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted(读取未提交内容) 、Read committed(读取提交内容) 、Repeatable read (可重复读)、Serializable(可串行化,该级别是最高级别的隔离级。它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。) ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。
在这里插入图片描述

3.MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景

引擎                 特性
  MYISAM           不支持外键,表锁,插入数据时,锁定整个表,查表总行数时,不需要全表扫描
  INNODB            支持外键,行锁,查表总行数时,全表扫描

4.索引

4.1、索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构。
在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

4.2、什么样的字段适合创建索引?
唯一、不为空、经常被查询的字段

4.3、MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引

普通索引        最基本的索引,没有任何限制
      唯一索引       与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
      主键索引        它是一种特殊的唯一索引,不允许有空值。
      全文索引       针对较大的数据,生成全文索引很耗时好空间。
      组合索引       为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则(最左前缀:如果对三个字段建立联合索引,如果第二个字段没有使用索引,第三个字段也使用不到索引了)

4.4、索引的优缺点,什么时候使用索引,什么时候不能使用索引
索引最大的好处是提高查询速度,
缺点是更新数据时效率低,因为要同时更新索引
对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。

4.5、索引的类型
A)聚集索引,表数据按照索引的顺序来存储的。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。
B)非聚集索引,表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与数据表行数据量一致。
在一张表上只能创建一个聚集索引,因为真实数据的物理顺序只可能是一种。如果一张表没有聚集索引,那么它被称为“堆集”(Heap)。这样的表中的数据行没有特定的顺序,所有的新行将被添加的表的末尾位置。

聚集索引:数据按索引顺序存储,叶子结点存储真实的物理数据
非聚集索引 : 存储指向真正数据行的指针

.4.6、索引的底层实现(B+树,为何不采用红黑树,B树)重点

树                         区别
    红黑树              增加,删除,红黑树会进行频繁的调整,来保证红黑树的性质,浪费时间
    B树也就是B-树         B树,查询性能不稳定,查询结果高度不致,每个结点保存指向真实数据的指针,相比B+树每一层每屋存储的元素更多,显得更高一点。
    B+树             B+树相比较于另外两种树,显得更矮更宽,查询层次更浅

.B+树的实现
一个m阶的B+树具有如下几个特征:
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

为什么使用B+Tree
索引查找过程中就要产生磁盘I/O消耗,主要看IO次数,和磁盘存取原理有关。
根据B-Tree的定义,可知检索一次最多需要访问h个节点。数据库系统的设计者巧妙利用了磁盘预读原理,
将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入
局部性原理与磁盘预读

B+树性能分析
从上面介绍我们知道,B树的搜索复杂度为O(h)=O(logdN),所以树的出度d越大,深度h就越小,I/O的次数就越少。B+Tree恰恰可以增加出度d的宽度,因为每个节点大小为一个页大小,所以出度的上限取决于节点内key和data的大小:

dmax=floor(pagesize/(keysize+datasize+pointsize))//floor表示向下取整
由于B+Tree内节点去掉了data域,因此可以拥有更大的出度,从而拥有更好的性能。

4.7、索引失效

5.Sql的优化

优化
1.sql尽量使用索引,而且查询要走索引
2.对sql语句优化
3、子查询变成 join
4、limit 分布优化,先利用ID定位,再分页
5、or条件优化,多个or条件可以用union all对结果进行合并(union all结果可能重复,union结果不重复)
6、不必要的排序
where代替having,having 检索完所有记录,才进行过滤
7、避免嵌套查询
对多个字段进行等值查询时,联合索引

6、varchar和char的使用场景

类型          使用场景
      varchar      字符长度经常变的
      char       用字符长度固定的

7、.数据库连接池的作用

维护一定数量的连接,减少创建连接的时间
更快的响应时间
统一的管理

8、关系型数据库和非关系型数据库区别

关系型数据库
优点

容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
使用方便:通用的SQL语言使得操作关系型数据库非常方便;
易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
支持SQL,可用于复杂的查询。
支持事务

缺点

为了维护一致性所付出的巨大代价就是其读写性能比较差;
固定的表结构;
不支持高并发读写需求;
不支持海量数据的高效率读写

非关系型数据库

使用键值对存储数据;
分布式;
优点
无需经过sql层的解析,读写性能很高
基于键值对,数据没有耦合性,容易扩展
存储数据的格式:nosql的存储格式是key,value形式

缺点
不提供sql支持

9、四种链接方式

10、[数据库主从复制和读写分离]

读写分离,读从库,写主库
spring配置两个数据库,通过AOP(面向切面编程),在写或读方法前面进行判断得到动态切换数据源。

数据库主从复制

11、三范式

1NF:字段不可分;

2NF:有主键,非主键字段依赖主键;

3NF:非主键字段不能相互依赖;

解释:

1NF:原子性 字段不可再分,否则就不是关系数据库;

2NF:唯一性 一个表只说明一个事物;

3NF:每列都与主键有直接关系,不存在传递依赖;

12、什么叫视图?游标是什么?

视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。 游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

视图的优缺点:
优点: 1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2 )用户通过简单的查询可以从复杂查询中得到结果。 3 )维护数据的独立性,试图可从多个表检索数据。 4 )对于相同的数据可产生不同的视图。 缺点: 性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据

13、数据库锁、数据库存储过程

数据库的锁

锁是一种并发控制技术,锁是用来在多个用户同时访问同一个数据的时候保护数据的。

有 2 种基本的锁类型
  共享(S)锁: 多个事务可封锁一个共享页;任何事务都不能修改该页;通常是该页被读取完毕,S锁立即被释放。在执行 select 语句的时候需要给操作对象(表或者一些记录)加上共享锁,但加锁之前需要检查是否有排他锁,如果没有,则可以加共享锁(一个对象上可以加 n 个共享锁 ),否则不行。共享锁通常在执行完 select 语句之后被释放,当然也有可能是在事务结束(包括正常结束和异常结束)的时候被释放,主要取决于数据库所设置的事务隔离级别。
  排它(X)锁: 仅允许一个事务封锁此页;其他任何事务必须等到 X 锁被释放才能对该页进行访问;X 锁一直到事务结束才能被释放。执行 insert、update、delete 语句的时候需要给操作的对象加排他锁,在加排他锁之前必须确认该对象上没有其他任何锁,一旦加上排他锁之后,就不能再给这个对象加其他任何锁。排他锁的释放通常是在事务结束的时候(当然也有例外,就是在数据库事务隔离级别被设置成 Read Uncommitted(读未提交数据)的时候,这种情况下排他锁会在执行完更新操作之后就释放,而不是在事务结束的时候)。

悲观锁 ,锁如其名,他对世界是悲观的,他认为别人访问正在改变的数据的概率是很高的,所以从数据开始更改时就将数据锁住,直到更改完成才释放。
乐观锁 ,他对世界比较乐观,认为别人访问正在改变的数据的概率是很低的,所以直到修改完成,准备提交所做的修改到数据库的时候才会将数据锁住, 当你读取以及改变该对象时并不加锁,完成更改后释放。乐观锁不能解决脏读的问题。

14、redis面试:

15、如何定位并优化慢查询SQL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值