mysql基础知识
来源:SegmentFault
时间:2023-02-23 20:18:08 230浏览 收藏
积累知识,胜过积蓄金银!毕竟在##column_title##开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《mysql基础知识》,就带大家讲解一下MySQL知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
前言:本文主要总结一下mysql常见的基础知识,内容比较基础,对于更多深入的内容,后面会写专门系列。
1.MySQL本身实际上是一个SQL接口,它的内部包含了多种数据引擎,常用的包括:
InnoDB:由Innobase Oy公司开发,支持事务;
MyISAM:MySQL早期集成的默认数据库引擎,不支持事务。
MySQL接口和数据库引擎的关系就好比浏览器和浏览器引擎的关系。切换浏览器引擎不影响浏览器界面,切换MySQL引擎不影响自己写的应用程序使用MySQL的接口。
2.主键是关系表中记录的唯一标识
选取主键的一个基本原则是:不使用任何业务相关的字段作为主键。主键不应该允许NULL,应该使用BIGINT自增或者GUID类型。允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。对于联合主键,允许一列有重复,只要不是所有主键列都重复即可.没有必要的情况下,尽量不使用联合主键,因为它给关系表带来了复杂度的上升。
3.外键并不是通过列名实现的,而是通过定义外键约束实现的。
通过定义外键约束,关系数据库可以保证无法插入无效的数据。由于外键约束会降低数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。
4.索引是关系数据库中对某一列或多个列的值进行预排序的数据结构
通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。可以对一张表创建多个索引。索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引。因此,索引越多,插入、更新和删除记录的速度就越慢。使用主键索引的效率是最高的,因为主键会保证绝对唯一。
5.SELECT语句可以不带FROM
不带FROM子句的SELECT语句有一个有用的用途,就是用来判断当前到数据库的连接是否有效。许多检测工具会执行一条SELECT 1,来测试数据库连接。
6.ORDER BY 后面跟多个条件
例如:ORDER BY age DESC, gender 表示先按age列倒序,如果有相同的age,再按gender列排序。如果有WHERE子句,那么ORDER BY子句要放到WHERE子句后面。
7.LIMIT ... OFFSET ...
例如:LIMIT 6 OFFSET 0表示,对结果集从0号记录开始,最多取6条。SQL记录集的索引从0开始。OFFSET是可选的,如果只写LIMIT 6,那么相当于LIMIT 6 OFFSET 0。在MySQL中,LIMIT 30 OFFSET 10 可以简写成LIMIT 10, 30。使用LIMIT
8.聚合查询
使用聚合函数进行查询,就是聚合查询,它可以快速获得结果。
如果聚合查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而SUM()、AVG()、MAX()和MIN()会返回NULL。
9.插入或替换
REPLACE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
若id=1的记录不存在,REPLACE语句将插入新记录,否则,当前id=1的记录将被删除,然后再插入新记录。
10.插入或更新
INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99) ON DUPLICATE KEY UPDATE name='小明', gender='F', score=99;
插入一条新记录(INSERT),但如果记录已经存在,就更新该记录
11.插入或忽略
INSERT IGNORE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
插入一条新记录(INSERT),如果记录已经存在,就直接忽略。
12.FORCE INDEX
在查询的时候,数据库系统会自动分析查询语句,并选择一个最合适的索引。但是数据库系统的查询优化器并不一定总是能使用最优索引。
如果已经知道如何选择索引,可以使用FORCE INDEX强制查询使用指定的索引,前提是索引必须存在。
13.数据库事务
把多条语句作为一个整体进行操作的功能,被称为数据库事务。数据库事务可以确保该事务范围内的所有操作都可以全部成功或者全部失败。如果事务失败,那么效果就和没有执行这些SQL一样,不会对数据库数据有任何改动。数据库事务具有ACID这4个特性:
Atomic,原子性,将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行;
Consistent,一致性,事务完成后,所有数据的状态都是一致的,即A账户只要减去100,B账户则必定加上了100;
Isolation,隔离性,如果有多个事务并发执行,每个事务作出的修改必须与其他事务隔离;
Duration,持久性,即事务完成后,对数据库数据的修改被持久化存储。
14.隐式事务、显式事务
对于单条SQL语句,数据库系统自动将其作为一个事务执行,这种事务被称为隐式事务。要手动把多条SQL语句作为一个事务执行,使用BEGIN开启一个事务,使用COMMIT提交一个事务,这种事务被称为显式事务。
15.隔离级别
对于两个并发执行的事务,如果涉及到操作同一条记录的时候,可能会发生问题。因为并发操作会带来数据的不一致性,包括脏读、不可重复读、幻读等。数据库系统提供了隔离级别,针对性地选择事务的隔离级别,避免数据不一致的问题。
Read Uncommitted是隔离级别最低的一种事务级别。在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读。
在Read Committed隔离级别下,一个事务可能会遇到不可重复读的问题。不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。在Read Committed隔离级别下,事务不可重复读同一条记录,因为很可能读到的结果不一致。
在Repeatable Read隔离级别下,一个事务可能会遇到幻读(Phantom Read)的问题。幻读是指,在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了。幻读就是没有读到的记录,以为不存在,但其实是可以更新成功的,并且,更新成功后,再次读取,就出现了。
Serializable是最严格的隔离级别。在Serializable隔离级别下,所有事务按照次序依次执行,因此,脏读、不可重复读、幻读都不会出现。虽然Serializable隔离级别下的事务具有最高的安全性,但是,由于事务是串行执行,所以效率会大大下降,应用程序的性能会急剧降低。如果没有特别重要的情景,一般都不会使用Serializable隔离级别。
默认隔离级别,如果没有指定隔离级别,数据库就会使用默认的隔离级别。在MySQL中,如果使用InnoDB,默认的隔离级别是Repeatable Read。
理论要掌握,实操不能落!以上关于《mysql基础知识》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
-
469 收藏
-
289 收藏
-
239 收藏
-
315 收藏
-
361 收藏
-
184 收藏
-
227 收藏
-
202 收藏
-
140 收藏
-
111 收藏
-
415 收藏
-
454 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习