| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL核心点笔记 -> 正文阅读 |
|
[大数据]MySQL核心点笔记 |
条件查询-- 1、关系运算符:> < >= <= = <> (也可以用!=,是一种宽容处理,不建议) select last_name,first_name,manager_id FROM employees limit 0,3 select last_name,first_name FROM employees WHERE commission_pct is NULL 嵌套查询-- 1、in 不相关子查询:子查询不依赖父级参数
-- 2、单一关系子查询,即子查询只会返回一条记录 相关子查询:子查询依赖父级参数
-- 3、(any、all)多关系子查询,即子查询会返回多条记录 相关的关系函数格式:>any、>all、<any、<all、>=any、>=all、<=any、<=all、=any、=all、<>any、<>all
-- 4、exists子查询:存在返回true,反之false,比如select *,只要有一条记录就返回true
集合查询-- 1、union:并集
-- 2、intersect:交集
-- 3、except:差集,如下获取院系为cs的19岁以上学生
派生表查询
排序查询
常见函数-- 常见函数:字符函数、数学函数、日期函数、流程控制函数、自定义函数 -- 案例:查询员工表的姓名,要求格式:姓首字符大写,其它字符小写,名所有字符大写,且姓和名之间用_分割,最后起别名为OUTPUT -- STRCMP(expr1,expr2) 比较 -- 4、流程控制 SELECT 聚合函数/统计/分组函数-- 聚合/统计函数 COUNT(DISTINCT expr,[expr...]) -- 分组 连接1.笛卡尔连接: ????????select * from tableA,tableB... 2.内连接 ????????2.1.内连接:SELECT * FROM student INNER JOIN score ON student.studentno=score.studentno ????????2.2.等值连接:基于笛卡尔积,添加等值条件:SELECT * FROM student, score WHERE student.studentno=score.studentno ????????2.3.不等值连接:同等值连接,只是运算符包括>、>=、<=、<、!>、!<和<>。 ????????2.4.自然连接:有去重功能的内连接,比如两张表有同名同类型字段,联表查询结果一般会显示两列该字段,而自然连接可以去重,保证只显示一列即可:SELECT ... FROM ... NATURAL JOIN ... ON ...=... 3.外连接 ????????3.1.左[外]连接:select * from student LEFT JOIN score ON student.studentno=score.studentno ????????3.2.右[外]连接:select * from student RIGHT JOIN score ON student.studentno=score.studentno ????????3.3.全连接:select * from student FULL JOIN score ON student.studentno=score.studentno 例题 1、简单的两表查询 use myemployees select last_name,department_name FROM employees e,departments d 2、添加筛选条件 查询部门编号>100的部门名和所在的城市名 查询有奖金的员工名、部门名 查询城市名中第二个字符为o的部门名和城市名 3、添加分组+筛选 4、添加分组+筛选+排序 5、三表连接 常用类型整型 六大约束not null 例如:create table sc( 四大SQL语句1、DDL (database definition language) 2、DML(database manipulate language) delete from tablename update tablename set colume = newvalue where ... insert into tablename values(...) 3、DQL select * from tablename [lock on share mode|for update] 4、DCL rollback、commit、grant... 存储引擎innodb默认事务自动开启 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;? 2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;? 3. InnoDB支持主键 4. InnoDB是聚簇索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。而辅助(非聚簇)索引需要两次查询,先查询到主键,然后再通过主键查询到数据。 5. 5.6版本后InnoDB也支持了全文索引 6. InnoDB不只支持表锁还支持行锁 7.?Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI ? ? ? ? Innodb:frm是表定义文件,ibd是结构+数据文件 ? ? ? ? Myisam:frm是表定义文件,myd是数据文件,myi是索引文件 事务show variables like '%auto%' 举例 ACID:原子性、一致性、隔离性、永久性 1、查看当前会话的 隔离级别: 【注:】mysql默认的事务处理级别是'REPEATABLE-READ',而Oracle和SQL Server是READ_COMMITED 锁SQL语句归根结底是读写操作,因而只有读写锁,而读写锁根据加锁范围又分为行锁和表锁: 行锁( 是读写锁、是可重入锁、是行锁/间隙锁、是悲观锁)?? ?行锁的劣势:开销大;加锁慢;会出现死锁 ?? ?行锁的优势:锁的粒度细(就是锁多,越细越多,越粗越少),发生锁冲突的概率低;处理并发的能力强 ?? ?上锁方式:自动加锁。对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁;对于普通SELECT语句,InnoDB不会加任何锁;当然我们也可以显示的加锁: ?? ??? ?1、读/共享锁:select * from tableName where … + lock in share more ?? ??? ?2、写/独占锁/排他锁:select * from tableName where … + for update、UPDATE、DELETE 和 INSERT ?? ?上锁时机:SQL执行语句时 表锁(是读写锁、是表锁、是可重入锁、是悲观锁)? ? 表锁的劣势:并发慢,锁冲突可能性大 ?? ??? ?1、读/共享锁(S锁):lock/unlock table 表名 read ?? ??? ?2、写/独占锁(X锁):lock/unlock table 表名 write 意向锁(是读写锁、是表锁、是可重入锁、是悲观锁)。? ? ? ? ? ?1、作用仅为了解决行锁和表锁冲突:例如事务A加了行锁,事务B想加表锁,B需要遍历每行查看是否有行锁,而等查到事务A的行锁时已经花了很长时间,为了解决这种问题引入了意向锁,意向锁是一种表级读写锁,加行锁前先加意向锁,这样当事务B要加表锁时只需要查看是否加了表锁或者意向锁即可,效率提升; ? ? ? ? ? ?2、意向锁不操心行锁与行锁间的冲突:如果两个事务都申请意向锁,则意向锁间相互兼容(即 IS和IX、IS和IS、IX和IS 间相互兼容),因为1中已经说了在加行锁前才会加意向锁,所以当前实际是行锁间冲突,而行锁机制会解决并发问题,不需要意向锁来操心 ? ? ? ? 上锁时机:SQL执行语句时 缓存MySQL缓存https://zhuanlan.zhihu.com/p/55947158#:~:text=MySQL%E8%83%BD%E5%A4%9F%E7%BC%93%E5%AD%98%E7%9A%84%E6%9C%80%E5%A4%A7%E6%9F%A5%E8%AF%A2%E7%BB%93%E6%9E%9C%EF%BC%8C%E6%9F%A5%E8%AF%A2%E7%BB%93%E6%9E%9C%E5%A4%A7%E4%BA%8E%E8%AF%A5%E5%80%BC%E6%97%B6%E4%B8%8D%E4%BC%9A%E8%A2%AB%E7%BC%93%E5%AD%98%E3%80%82,%E9%BB%98%E8%AE%A4%E5%80%BC%E6%98%AF1048576%20%281MB%29%E5%A6%82%E6%9E%9C%E6%9F%90%E4%B8%AA%E6%9F%A5%E8%AF%A2%E7%9A%84%E7%BB%93%E6%9E%9C%E8%B6%85%E5%87%BA%E4%BA%86%E8%BF%99%E4%B8%AA%E5%80%BC%EF%BC%8CQcache_not_cached%E7%9A%84%E5%80%BC%E4%BC%9A%E5%8A%A01%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%9F%90%E4%B8%AA%E6%93%8D%E4%BD%9C%E6%80%BB%E6%98%AF%E8%B6%85%E5%87%BA%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%80%83%E8%99%91%E5%9C%A8SQL%E4%B8%AD%E5%8A%A0%E4%B8%8ASQL_NO_CACHE%E6%9D%A5%E9%81%BF%E5%85%8D%E9%A2%9D%E5%A4%96%E7%9A%84%E6%B6%88%E8%80%97%E3%80%82 总的来说MySQL缓存用的比较少,在大数据量、小并发、变动小的系统中非常适用,高并发时还是用分布式缓存吧 索引以innoDB为例,创建表时通过B树实现了主键的聚簇索引,因此查询时想要发挥B树的快查威力就必须用主键查询,但一般SQL查询都是以主键以外的字段查询,因此需要以常用的查询字段建立非聚簇索引 索引添加1 新建表中添加索引① 普通索引
② 唯一索引
③ 全文索引
④ 多列索引
2 在已建表中添加索引① 普通索引
② 唯一索引
③ 全文索引
④ 多列索引
3 以修改表的方式添加索引① 普通索引
② 唯一索引
③ 全文索引
④ 多列索引
?以下情况适合创建索引
以下情况不适合创建索引
调优????????写一手高效的sql 也是需要功力的,知道清楚如何避免索引失效 索引调优https://zhuanlan.zhihu.com/p/61687047 小表驱动大表https://blog.csdn.net/fly_miqiqi/article/details/90348800 存储过程存储过程https://blog.csdn.net/qq_36777191/article/details/104171953 存储函数触发器https://blog.csdn.net/qq_36777191/article/details/104176504触发器触发器https://blog.csdn.net/qq_36777191/article/details/104190013 三大日志? ? ? ? 即redolog、binlog、undolog ????????redolog ? ? ? ? 1、是innoDB的日志,物理存储; ? ? ? ? 2、任务是宕机重启后保证数据一致性; ? ? ? ? 3、记录事务,当事务结束时并不会立即刷新到磁盘,而是通过redo buffer记录到redolog,然后再异步刷进ibd; ? ? ? ? 4、redolog写入ibd的那部分数据就相当于过期了,redolog会用新数据覆盖那部分数据,也因此redolog日志是可重复使用的持久化文件 ????????binlog ? ? ? ? 1、是MySQL的日志,逻辑存储; ? ? ? ? 2、任务是日志分析,主从同步,数据恢复; ? ? ? ? 3、记录数据变动,记录方式有row、statement和miexd ? ? ? ? ? ? ? ? row:比如某行某个字段变为了***,优点是记录细致,缺点资源大 ? ? ? ? ? ? ? ? statement:就是SQL语句,优点省资源,缺点主从模式下如果有函数容易不一致,比如now(),uuid() ? ? ? ? ? ? ? ? mixed:自动选择用row还是statement ????????redolog和binlog的区别 ? ? ? ? 1、redo log是在InnoDB存储引擎层产生,而binlog是MySQL数据库的上层产生的,并且二进制日志不仅仅针对INNODB存储引擎,MySQL数据库中的任何存储引擎对于数据库的更改都会产生二进制日志。 ? ? ? ? 2、两种日志记录的内容形式不同。MySQL的binlog是逻辑日志,其记录是对应的SQL语句。而innodb存储引擎层面的重做日志是物理日志。 ? ? ? ? 3、两种日志与记录写入磁盘的时间点不同,二进制日志只在事务提交完成后进行一次写入。而innodb存储引擎的重做日志在事务进行中不断地被写入,并且日志不是随事务提交的顺序进行写入的。 ?????????4、binlo在写满或者重启之后,会新产生binlog文件,而redo log是循环使用。 ????????5、binlog作为数据分析,数据恢复,主从同步使用,而redo log会参与到ibd的数据持久化流程,目的是异常宕机或者介质故障时恢复数据。? binlog在主从复制中的应用 ? 可以看出redolog参与了ibd的数据持久化,redlolog的地位非常重要? ????????undolog???????? ? ? ? ? 1、实现事务的原子性:undo log可以用于实现事务的原子性, 如果事务处理过程出现一些特殊情况,比如sql错误等等情况,就要执行回滚(rollback)操作,mysql就可以利用undo log将数据恢复到事务开始之前 ? ? ? ? 2、实现多版本并发控制(MVCC):undo log 在 MySQL InnoDB 存储引擎中用来实现多版本并发控制,事务没提交之前,undo日志可以作为高并发情况下,其它并发事务进行快照读 好文推荐 ??binloghttps://blog.csdn.net/Allenzyg/article/details/106446992??redolog的作用和原理https://blog.csdn.net/qq_42773863/article/details/120988441?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165324292716782425142146%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165324292716782425142146&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-120988441-null-null.142^v10^control,157^v4^control&utm_term=redolog+ibd&spm=1018.2226.3001.4187redolog和binlog的区别https://blog.csdn.net/wanbin6470398/article/details/81941586 undologhttps://blog.csdn.net/u014427391/article/details/109022361 ????????集群就是n主m从的布局,总的来说主从复制的逻辑在于主机写,从机读。从单体架构往集群架构发展的大概逻辑:
好文推荐 主从复制https://blog.csdn.net/qq_21153619/article/details/81529880 主从复制https://blog.csdn.net/weixin_30539317/article/details/113281081?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%20MySQL%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-113281081.142^v10^control,157^v4^control&spm=1018.2226.3001.4187relaylog和binlog实现MySQL的主从同步原理https://blog.csdn.net/javaanddonet/article/details/112596148 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:08:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |