yhm138

推荐些参考资料和工具

Navicat Premium 支持连接数据库种类多,界面直观 破解教程
MySQL必知必会 一本小册子,新手入门
《MySQL必知必会》概括版 - yhm138 - 博客园
高性能MySQL
MySQL技术内幕——InnoDB存储引擎第2版 很原理性的东西,DBA建议观看
《MySQL技术内幕 InnoDB存储引擎》目录 - yhm138 - 博客园

Linux下安装MySQL

准备安装包  阿里云盘链接  https://www.aliyundrive.com/s/zf4SAd5MQ2F
MySQL-server-5.5.46-1.linux2.6.x86_64.rpm
MySQL-client-5.5.46-1.linux2.6.x86_64.rpm

移除mariadb 
yum -y remove maria*

以root权限安装
sudo rpm -ivh MySQL-server-5.5.46-1.linux2.6.x86_64.rpm
sudo rpm -ivh MySQL-client-5.5.46-1.linux2.6.x86_64.rpm

启动MySQL服务
service mysql start


如果读取文件时报错没有权限
赋予mysql用户及mysql组 权限,更换文件夹所有者
chown -R mysql:mysql /var/lib/mysql/


rpm安装的MySQL是不会安装/etc/my.cnf 文件的。
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf


在 my.cnf 中的 [mysqld] 下,追加 lower_case_table_names = 1
# 1表示不区分大小写,0区分大小写
lower_case_table_names = 1


首次安装时,默认密码为空,可以使用如下命令修改 root 密码,
/usr/bin/mysqladmin -u root password aicp123


配置远程登录
处于安全考虑,Mysql 默认是不允许远程访问的,可以使用下面开启远程访问
# 赋予任何主机访问数据的权限
mysql>GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'%\' IDENTIFIED BY \'aicp123\' WITH GRANT OPTION;
# 使修改生效
mysql>FLUSH PRIVILEGES;
# 退出mysql命令行
mysql>quit

如果再不行应考虑是否开启了防火墙

常用命令

mysql -u用户名 -p口令

登入

show databases;
use {数据库名};
show tables;
desc  {表名};
select * from {表名};

这个网上也很多:
https://devhints.io/mysql

一些高级特性

保持更新

视图

视图,5.0版本之后引入。视图本身是一个虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,它返回的数据是MySQL从其他表中生成的。视图和表是在同一个namespace,MySQL在很多地方对于视图和表是同样对待的,不过视图不能创建trigger,也不能用DROP TABLE命令删除视图。

视图仅仅是用来查看存储在别处的数据的一种设施。

为什么使用视图?

  • 重用SQL语句
  • 简化复杂的SQL操作。用到创建好的视图而不需要这个视图是怎么来的
  • 使用表的组成部分而不是整个表。
  • 保护数据。用户只能有表的特定部分的访问权限而不是整个表的访问权限。
  • 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

事务

事务transaction 指一组SQL语句。
回退rollback 指撤销指定SQL语句的过程。
提交commit 指将未存储的SQL语句结果写入数据库。
保留点 savapoint 指事务常处理中设置的临时占位符place-holder,你可以对它发布回退(与回退整个事务不同)。

事务。MyISAM不支持事务,InnoDB支持事务。

事务四特性 ACID
A 原子性。事务是最小的单位,不可分割。
C 一致性。 一个事务中的sql语句要么都成功,要么都不成功。
I 隔离性。 事务1和事务2之间是具有隔离性的
D 持久性。 事务一旦结束(commit or back),就不能返回。

事务开启方式
1、修改默认提交 set autocommit=0;
2、begin
3、start transaction

事务手动提交与回滚
手动提交 commit
手动回滚 rollback

MySQL事务的隔离性有几大级别:
read uncommitted 读未提交的
read committed 读已经提交的
repeatable read 可以重复读
serializable 串行化

主键

一列(或一组列),其值能够唯一区分表中每个行。
可以认为,两个不同行的主键一定是不同的??

外键

InnoDB支持外键,内置存储引擎中貌似只有InnoDB支持外键。
PBXT也支持外键。

InnoDB强制外键使用索引,但还是无法消除这种约束检查的开销。

外键约束使得查询需要额外访问一些别的表,这也意味着需要额外的锁。
如果向子表中写入一条记录,外键约束会让InnoDB检查对应的父表的记录,也就需要对父表的对应记录进行加锁操作。(当然!)
这会导致额外的锁等待,甚至会导致一些死锁。因为没有直接访问这些父表,所以这类死锁问题往往很难排查。

对于相关数据的同时更新 当然外键更加合适。
如果外键只是用来做数值约束。那还不如用触发器或者设计表的时候显式指定ENUM类型。

游标

游标是一段私有的SQL工作区,也就是一段内存区域,用于暂时存放受SQL语句影响到的数据。通俗理解就是将受影响的数据暂时放到了一个内存区域的虚表中,而这个虚表就是游标。
MySQL在服务器端提供 ro、单向的游标,而且只能在存储过程或者更底层的客户端API中使用。

MySQL游标中指向的对象都是存储在临时表中而不是实际查询到的数据

MySQL中的游标总是只读的。它可以逐行指向查询结果,然后让程序做进一步的处理。在一个存储过程中,可以有多个游标,也可以在循环中“嵌套”地使用游标。

索引

索引有如下三个优点:
1、索引大大减少了服务器需要扫描的数据量
2、索引可以帮助服务器避免排序和临时表
3、索引可以把随机I/O变为顺序I/O

B树索引

B树索引 大多数MySQL引擎都支持这种索引。

不过,底层的存储引擎也可能使用不同的存储结构,比如。NDB集群存储引擎内部实际上使用了T树结构存储这种索引,即使其名字是BTREE;InnoDB则使用的是B+Tree

存储引擎以不同的方式使用B树索引,性能也各有不同,各有优劣。
MyISAM使用前缀压缩技术使得索引更小,但InnoDB则按照原数据格式进行存储。
MyISAM索引通过数据的物理位置引用被索引的行,而InnoDB则根据主键引用被索引的行。

全值匹配 查找姓名为Cuba Allen、出生于1960-01-01的人
匹配最左前缀
匹配列前缀 查找所有以J开头的姓的人
匹配范围值
精确匹配某一列并范围匹配另一列
只访问索引的查询

B树索引的限制:
如果不是按照索引的最左列开始查找,则无法使用索引。不能查找姓氏以某个字母结尾的人;生日不是最左的话,无法查找某个特定生日的人
不能跳过索引中的列。
如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查找。

哈希索引

hash index

只有精确匹配索引所有列的查询才有效。
MySQL中,只有Memory引擎支持哈希索引。

空间数据索引 R-Tree

MyISAM支持空间索引,可以用作地理数据存储。

全文索引

MyISAM引擎 支持 全文索引
InnoDB引擎 不支持 全文索引

其他索引

分形树索引 fractal tree index
InnoDB引擎的聚簇索引
覆盖索引
Patricia tries

存储引擎

InnoDB

MyISAM

想起来字节跳动一面被面试官鄙视说MyISAM是5.1之前的版本所用默认引擎。
MyISAM不支持事务和行级锁。

MySQL内建的其他存储引擎

Archive引擎
Blackhole引擎
CSV引擎
Federated引擎
Memory引擎
Merge引擎
NDB集群引擎

第三方存储引擎

MySQL 从2007年开始提供了插件式的存储引擎API
OLTP类引擎
面向列的存储引擎
社区存储引擎

MVCC 多版本并发控制

可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。

MVCC的实现,是通过保存数据在某个时间点的快照来实现的。
MVCC分为乐观并发控制和悲观并发控制。

MySQL面试题

分类:

技术点:

相关文章:

  • 2021-09-22
  • 2022-12-23
  • 2022-12-23
  • 2021-07-18
  • 2022-12-23
  • 2021-12-27
猜你喜欢
  • 2021-10-23
  • 2021-12-18
  • 2022-01-10
  • 2022-12-23
  • 2022-03-08
  • 2021-08-03
  • 2021-11-17
相关资源
相似解决方案