数据库知识点

断言:一个断言就是数据库需要时刻满足的某一条件。

授权:对不同用户在数据库中的不同数据值上允许不同的访问类型。这些区别以授权来表达。读权限、插入权限、更新权限、删除权限。

一、事务
事务:数据库应用中完成单一逻辑功能的操作集合。
事务四大特性 (ACID):
Automic原子性:事务所有操作在数据库中要么全部正确反映、要么全部不反应
Consistency一致性,执行事务前后保持数据库一致性
Isolation隔离性,每个事务都感觉不到系统中有其他事务在并发执行
Durablitity持久性,一旦事务提交,对数据的改变就是永久的

二、触发器
触发器是一条语句,当对数据库作修改时,自动被系统执行,设置触发器,要知道执行触发器的条件以及触发器的动作。
触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

三、存储过程
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。
调用: 1)可以用一个命令对象来调用存储过程。
2)可以供外部程序调用,比如:java程序。

存储过程的优缺点?
优点: 1)存储过程是预编译过的,执行效率高。 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。 3)安全性高,执行存储过程需要有一定权限的用户。 4)存储过程可以重复使用,可减少数据库开发人员的工作量。
缺点:移植性差

存储过程与函数的区别:


image.png

四、索引:
索引:对数据库中单列或者多列的值进行排序的一种结构,相当于目录。

create index studentID_index on student(ID)

优点:提高查询速度。
缺点:是更新数据时效率低,因为要同时更新索引
对数据进行频繁查询进建立索引,如果要频繁更改数据不建议使用索引。

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

索引类型有哪些?**
简单索引(基本索引)
唯一索引(列值唯一,可以有null)
主键索引(列值唯一,不可以有null,表中只有一个)
组合索引(多列值组成一个索引,专用于组合搜索,效率大于索引合并)
全文索引(对文本内容进行分词、搜索)

索引的原理是B+树(数据有序、范围查询)
原因:1、保证树高,减少IO请求的次数
2、保证树宽,有利于范围查找

索引匹配原则:最左匹配原则

索引的底层实现(B+树,为何不采用红黑树,B树)
增加,删除,红黑树会进行频繁的调整,来保证红黑树的性质,浪费时间
B树,查询性能不稳定,查询结果高度不致,
B树,每个结点保存指向真实数据的指印,相比B+树每一层每屋存储的元素更多,显得更高一点。

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

五、视图与游标
视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

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

表和视图的关系
视图:一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。
表:关系数据库中实际存储数据用的。

六、数据库表的操作:
1、列举几种表连接方式,有什么区别?
内连接、自连接、外连接(左、右、全)、交叉连接。
内连接:只有两个元素表相匹配的才能在结果集中显示。
外连接:
左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。只显示左边表的属性数据,右边独有的ix
右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
全外连接:连接的表中不匹配的数据全部会显示出来。 交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。

2、主键和外键的区别?
主键在本表中是唯一的、不可唯空的,外键可以重复可以唯空;外键和另一张表的主键关联,不能创建对应表中不存在的外键。

3、在数据库中查询语句速度很慢,如何优化?

1.建索引
2.减少表之间的关联
3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据 量大的表排在前面
4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据
5.尽量用PreparedStatement来查询,不要用Statement(防止SQL注入)

4、数据库三范式是什么?
第一范式:无重复的列(无重复的属性),每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
第二范式:行可以唯一区分,主键约束 。非主属性非部分依赖于主关键
第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束。属性不依赖于其它非主属性。(我的理解是消除冗余)
且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上

5、union和union all有什么不同?
UNION:表链接后对结果集进行排序、去重。
UNION ALL:只是简单的将两个结果合并后就返回,不去重。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL。

6、order by与group by的区别
order by 排序查询、asc升序、desc降序
group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

7、怎么去除去重:使用distinct关键字

六、数据库存储引擎 InnoDB索引和MyISAM索引的区别:

一是主索引的区别,InnoDB的数据文件本身就是索引文件。而MyISAM的索引和数据是分开的。

二是辅助索引的区别:InnoDB的辅助索引data域存储相应记录主键的值而不是地址。而MyISAM的辅助索引和主索引没有多大区别(叶节点的data域存放的是数据记录的地址)。

七、数据库隔离级别


image.png

脏读:事务A读取数据过程中,事务B对数据进行了

八、SQL优化:
数据库优化的总结

(一)最重要的就是避免全表扫描
为了防止数据库引擎放弃使用索引而进行全表扫描,可以避免以下SQL语句:
where中使用字段进行null值判断【可设字段的默认初始值为0,判断是否为0】
where中使用!=或 <>(因为索引只能说明什么在数据库,而不能说明什么不在,!=会放弃使用索引)
where中使用or来连接条件【当两个or的两个字段一个有索引一个无索引时会导致全表扫描===> 可写成多条sql语句,再用union all 求并集】
where中使用in/not in
【对于连续值:可改为用between;对于用in在where再进行一层select的(select num from a where num in(select num from b) ),可以改为exists:(select num from a where exists(select 1 from b where num=a.num)】
where 中的“=”左边进行函数、算术运算或其他表达式运算
【如select id from t where num/2=100; 应将其运算尽量改到等号右边:select id from t where num=2*100 】

(二)对于索引:
索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,(因为 insert 或 update 时有可能会重建索引)
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

(三)表的设计
使用varchar代替char(变长字段存储空间小,节省存储空间;在一个相对较小的字段的查询效率较高)
只返回需要查询的字段 而不要使用select*(此时会扫描表中所有的列)
优化group by


关于索引的问题?
什么是索引?
【索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。】

为什么索引能提升效率?
【索引通过事先排好序,在查找时可以应用二分查找等高效率的算法】

什么情况下索引失效?为什么失效?
【%在第一位;在where中使用or且其中一个列非索引;在where中使用!=,<>;在where中使用in/not in,where中'='左边运算;字符型字段为数字时在where条件里不添加引号
此时引擎会放弃使用索引,而改用全表扫描】

like%..%为什么会扫描全表?遵循什么原则?
【因为这样是全模糊查找, 无法使用索引, 所以会扫描全表。
使用了索引的最左原则, 因为索引没生效】

建索引的几大原则?
1、最左前缀匹配原则:
mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配。比如a = 1 and b = 2 and c > 3 and d = 4,如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2、=和in可以乱序
比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式。
3、尽量扩展索引而不要新建索引
比如表中已经有a的索引,现在要加(a,b)的索引,只需要修改原索引
4、尽量选择区分度高的列作为索引
区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少。

INNODB和MYISAM
SQL优化
数据库中数据结构【b树和hash】
数据库优化

对于mysql数据库来说,索引的使用是很巧妙的。它设置的好可以提高速度,设置的不好不光无法提高速度,还会造成浪费内存空间。在优化方面,
我们首先建立索引,要判断是否需要建立。其次使用的时候,要尽可能避免索引与or,where。。。。。。(此处有至少10条)一起使用。】
数据库锁是怎么实现的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,083评论 0 0
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,733评论 0 44
  • 一、 left join, right join, inner join区别? left join(左联接) 返回...
    小拳头酱阅读 728评论 0 3
  • #v课会·第3季·小学30天思维导图实战营# 打卡天数:2/30 打卡时间:6月12日 打卡主题:思维导图—让孩子...
    小桥流水_f592阅读 430评论 0 0
  • 让自己失望,让自己绝望,为自己的存在叹息。 我已经停歇不前,哪有勇气从头再来。 我也想一辈子只为自己,然而,沉重的...
    一刀两断阅读 386评论 0 0