您现在的位置是:首页 > 网页设计心得 > 博客日记博客日记
MYSQL面试常考知识点总结
胜于蓝2019-07-25【博客日记】人已围观
简介数据库的三范式 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三
数据库的三范式
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
SQL执行顺序
关键字:select、from、join、on、where、group by、having、order by、distinct执行顺序from > join > on > where > group by > having > select > distinct > order by
UNION/ALL、EXCEPT/ALL和INTERSECT/ALL
UNION/ALL:组合多个结果表,并消去表中重复行,和ALL一起使用时,不消除重复行。EXCEPT/ALL:在table1中但不在table2中的行并消除重复行,和ALL一起使用时,不消除重复行。
INTERSECT/ALL:包括table1和table2中都有的行并消除重复行,和ALL一起使用时,不消除重复行。
内连接、外连接、笛卡儿积(交叉连接)
内连接:结果仅包含符合连接条件的两表中的行外连接:结果包含符合条件的行,同时包含不符合条件的行(分为左外连接、右外连接和全外连接)
左外连接:左表全部行+右表匹配的行,如果左表中某行在右表中没有匹配的行,则显示NULL。
右外连接:右表全部行+左表匹配的行。
全外连接:全外连接:不管匹配不匹配,全部显示出来。
交叉连接:返回左表中所有行与右表中所有行的组合,也称笛卡尔积。
VARCHAE和CHAR的区别
CHAR:指定长度,如果一个数据实际长度比设定长度短,那么它将按照设定(最长)长度储存,不足部分,填补空格。适用于固定长度的字段,如性别、手机号等。VARCHAE:指定最大长度,但该长度可变,即如果数据的实际长度比设定长度短,那么它将按照实际长度储存,而不占用剩余的空间。 适用于非固定长度的字段,如姓名、城市名等。
DROP,DELETE与TRUNCATE的区别
DROP直接删掉表 。TRUNCATE删除表中数据,再插入时自增长id又从1开始 。
DELETE删除表中数据,可以加WHERE字句。
数据库事务(ACID)
原子性(Atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作。一致性(Consistency)数据库总是从一个一致性的状态转换到另一个一致性的状态。
隔离性(Isolation)一个事务所做的修改在最终提交以前,对其他事务是不可见的。
持久性(Durability)一旦事务提交,则其所做的修改会永久保存到数据库。
数据库的乐观锁和悲观锁
悲观锁:对数据被外界修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。(悲观锁的实现,往往依靠数据库提供的锁机制)乐观锁:大多是基于数据版本 ( Version )记录机制实现。
即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来 实现。 读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提 交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据 版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据
脏读、虚读和不可重复读
脏读:一个事务读取到了另外一个事务没有提交的数据;(修改的数据还未提交就被另一个事务使用这个数据)不可重复读:在同一事务中,两次读取同一数据,得到内容不同;(两次读取同一数据之间,另一个事务对数据进行了修改)
虚度:同一事务中,用同样的操作读取两次,得到的记录数不相同;(两次相同的操作之间,另一个事务对数据进行了新增或删除)
MySQL中的四种事务隔离级别
序列化 (Serializable):可避免脏读、不可重复读、幻读的发生。可重复读 (Repeatable read):可避免脏读、不可重复读的发生。
读已提交(Read committed):可避免脏读的发生。
读未提交 (Read uncommitted):最低级别,任何情况都无法保证。
MVCC(多版本并发控制)
MVCC最大的好处:读不加锁,读写不冲突。1.多版本并发控制(MVCC)是一种用来解决读-写冲突的无锁并发控制,也就是为事务分配单向增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照。 这样在读操作不用阻塞写操作,写操作不用阻塞读操作的同时,避免了脏读和不可重复读
2.当MVCC数据库更新一条数据时,不会直接重写原始的数据,而是修改新创建的数据副本。因此会有多个版本的数据被保存下来。每个事务看到的数据版本依赖于隔离级别的实现。MVCC里最通用的隔离级别的实现就是快照隔离。在快照隔离的情况下,事务只会获取到数据的在事务开始前的状态。
MYSQL主从复制
由于内容所占篇幅较大,具体内容请移至另一篇《MYSQL主从复制》数据库的分库分表
由于内容所占篇幅较大,具体内容请移至另一篇《数据库的分库分表》数据库SQL优化
由于内容所占篇幅较大,具体内容请移至另一篇《数据库SQL优化》聚集索引和非聚集索引
由于内容所占篇幅较大,具体内容请移至另一篇《聚集索引和非聚集索引》索引是什么?有什么作用以及优缺点?
由于内容所占篇幅较大,具体内容请移至另一篇《MYSQL的索引相关系列总结》数据库引擎MyISAM和InnoDB
|
MyISAM |
InnoDB |
事务支持 |
不支持 |
支持 |
锁的粒度 |
表锁 |
行锁 |
存储容量 |
没有上限 |
64TB |
哈希索引 |
不支持 |
支持 |
全文索引 |
支持 |
以前不支持,现在支持 |
外键 |
不支持 |
支持 |
InnoDB是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发
InnoDB是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。
MyISAM表的数据文件和索引文件是自动分开的;InnoDB的数据和索引是存储在同一个表空间里面,但可以有多个文件组成。
为什么MyISAM会比InnoDB的查询速度快
1.InnoDB要缓存数据块,而MyISAM只缓存索引块2.InnoDB寻址要映射到块,再到行,MyISAM记录的直接是文件的OFFSET,定位比InnoDB要快
3.InnoDB还需要维护MVCC一致
慢查询日志
由于内容所占篇幅较大,具体内容请移至另一篇《慢查询日志》XSS、SQL和CSRF攻击
XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式。防止方法:做数据校验、做标签转换,如:空格 转化为 。
SQL注入攻击是注入攻击最常见的形式,当服务器使用请求参数构造SQL语句时,恶意的SQL被嵌入到SQL中交给数据库执行;
防止方法:输入校验、sql不要动态拼接,用参数化的sql。
CSRF攻击(Cross Site Request Forgery,跨站请求伪造)是攻击者通过跨站请求,以合法的用户身份进行非法操作(如转账或发帖等)。
CSRF的原理是利用浏览器的Cookie或服务器的Session,盗取用户身份;
防止方法:使用post代替get,因为post不会被缓存;每次清除掉cookie。
Tags:
很赞哦! ()
上一篇:返回列表
下一篇:Python知识点汇总
随机图文
-
免费建二级域名网站(解析网永久免费二级域名)
小编常常在头条上看到很多广告文章,多是打着某种技术的噱头,然后推销自己的建站网站,最便宜的一整套也要500 多。小编对此深恶痛觉,500 多可以买个固态硬盘了好不好。一、免费的 -
MYSQL面试常考知识点总结
数据库的三范式 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性; 第三 -
laravel_blogs诗词博客收藏
Laravel诗词博客-匠心编程,热爱生活。感謝各位朋友的支持,很开心和你分享我的代码,希望大家也能多写博客,提高自己能力的同时又能以后回顾所学的知识。饮水思源,你的 Star 就是对 -
Python知识点汇总
1、Python的两种编程方式:交互式(随输随运行)和文件式(主要方式;批量运行出结果) 2、一切皆对象,每个对象由标识(id())、类型(type())和值(print())标识。 3、Python采用基于值的内存管