数据库
文章平均质量分 83
数据库相关知识点
lamdaxu
微信公众号:【lamdaxu】,欢迎大家关注
展开
-
Oracle中dblink简单介绍
前言之前学习一直使用的Mysql数据库,现在再公司是改用了Oracle数据库。对Oracle数据库的了解还是比较少的,这次接触到了dblink,那就刚好写一篇文章来记录一下。什么是dblinkdbLink是简称,全称是databaselink,翻译过来就是数据库链接的意思。那么这个dblink的作用是什么呢。它主要是用来做跨库访问的。比如说我现在有一个A数据库,还有一个B数据库,那我我现在想在A库中访问B数据库中的数据。那么我们怎么做。我们就可以在A库中创建一个dblink来链接到B数据库。这样我们在原创 2021-09-04 17:52:06 · 18277 阅读 · 2 评论 -
PL/SQL流程控制语句
PL/SQL的流程控制语句,包括如下三类:控制语句: IF语句循环语句: LOOP语句,EXIT语句顺序语句: GOTO语句,NULL语句条件语句语法规则:IF<布尔表达式>THEN PL/SQL 和SQL语句;END IF;IF<布尔表达式>THEN PL/SQL和SQL语句;ELSE 其他语句;END IF;IF<布尔表达式>THEN PL/SQL和SQL语句;ELSIF<其他布尔表达式>THEN原创 2021-03-24 13:24:48 · 422 阅读 · 0 评论 -
PL/SQL块结构和组成元素
PL/SQL块PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。DECLARE/* 声明部分:在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数*/BEGIN/* 执行部分:过程及SQL语句,即程序的主要部分 */EXCEPTION/* 执行异常部分: 错误处理*/END;其中,执行部分是必须的。PL/SQL块可以分为三类:1、无名块:动态构造,只能执行一次2、子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其他程序中调原创 2021-03-23 15:36:06 · 666 阅读 · 0 评论 -
Mysql实战09:Mysql为什么有时候会选错索引
我们知道Mysql中的一张表其实可以支持多个索引的,但是,你写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由Mysql来确定的。有时候,一条本来可以执行很快的语句,却由于Mysql选错了索引,而导致速度变得很慢?先创建一个简单的表,表里面有a、b两个字段,并分别建上索引:CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PR原创 2021-03-05 13:13:36 · 96 阅读 · 2 评论 -
Mysql实战08:普通索引和唯一索引
什么时候用普通索引,什么时候用唯一索引呢?假设我们在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就需要执行类似的SQLselect name from CUser where id_card="XXXXXXXXXXXXX"所以,我们会考虑在id_card字段上建立索引。由于身份证号字段比较大,不推荐把身份证号作为主键,那么现在有两个选择,要么给id_card字段创建唯一索引,要么创建普通索引。如果业务代码保证原创 2021-03-05 09:36:44 · 240 阅读 · 2 评论 -
Mysql实战07:事务是否隔离
我们知道在可重复读的隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他的事务修改了数据,事务T看到的仍然跟在启动是看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,不受外界影响。但是了解行锁后,又发现,一个事务要更新一行,如果刚好有另外要给事务拥有这一行的行锁,它会进入等待状态。举例说明首先要明白,begin/start transaction命令并不是一个事务去起点,在执行到它们之后的第一个操作InnoDB表的语句,事务才真正启动。如果你想要要马上启原创 2021-03-04 13:24:57 · 55 阅读 · 1 评论 -
Mysql实战06:行锁
Mysql的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎表,同一张表上任何时刻都只能有一个更新在执行,这会影响业务的并发度。InnoDB是支持行锁的,这也是MyIsAM被InnoDB替代的重要原因之一。两阶段锁举例说明,在下面的操作序列中,事务B的update语句执行时会是什么现象,假设字段id是表t的主键。实验发现,事务B的update语句会被阻塞,直到事务A持有commit之后,事务B才能继原创 2021-03-03 14:06:42 · 355 阅读 · 0 评论 -
Mysql实战05:全局锁和表锁
根据加锁的范围,Mysql里面的锁大致可以分为全局锁,表锁,行锁三类。全局锁全局锁就是对整个数据库实例加锁。Mysql提供了一个加全局读锁的方法,命令是Flush tables with read lock。当需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句、数据定义语句、更新事务提交语句**全局锁的典型使用场景是,做全库逻辑备份。**也就是把整库每个表都select出来存成文本。让整库都只读,是比较危险的:如果在主库上备份,那么在备份期间都不能执行原创 2021-03-03 11:26:50 · 99 阅读 · 0 评论 -
Mysql实战04:索引
索引是什么?索引是一种数据结构,索引的出现就是为了提高数据查询的效率,就像书的目录一样。索引的常见模型索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,这里就引入了索引模型的概念。可以用于提高读写效率的数据结构很多。比较常见的有哈希表,有序数组,搜索树1、哈希表是一种以键值对(key-value)存储数据的结构,我们只要输入待查找的值key,就可以找到其对应的值value。哈希的思路比较简单,把值发在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。原创 2021-03-02 17:26:01 · 71 阅读 · 0 评论 -
Mysql实战03:事务隔离
1.mysql原子性的保证是利用了undo log。undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。2.mysql持久性的保证是利用了redo log。Mysql是先把磁盘上的数据加载到内存中,在内存中对数据进行修改,再刷回磁盘上。如果此时突然宕机,内存中的数据原创 2021-03-02 15:50:13 · 85 阅读 · 0 评论 -
Mysql实战02:日志系统,一条SQL更新语句是如何执行的
前言:看了极客时间的Mysql实战45讲,觉得写的很好,做一下笔记。在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所有这条语句就会把表T上所有的缓存结果都清空。这是我们不推荐使用查询缓存的原因。查询流程:连接器–》分析器–》优化器–》执行器–》存储引擎。与查询流程不一样的是,更新流程还涉及两个重要的日志模块。redolog和binlog。redo log日志模块假如说你要开一家饭店,顾客到你开的饭店来吃饭消费。消费就涉及到一个问题,赊账。如果赊账的人不多,掌柜可以把顾客名和账目写在黑板上。原创 2021-03-02 14:24:35 · 126 阅读 · 0 评论 -
mysql实战01:基础架构,一条SQL查询语句是如何执行的
前言:看了极客时间的Mysql实战45讲,觉得写的很好,做一下笔记。问题:平时我们再使用数据库的时候,比如说执行下面这个查询语句:mysql> select * from T where ID=10;我们只知道,输入一条语句之后,返回得到了一个结果,却不知道这条语句在Mysql内部的执行。MySQL架构介绍大体上来说,Mysql可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖了Mysql大多数的核心服务功能,以及所有的内置函数,原创 2021-03-02 08:54:13 · 101 阅读 · 0 评论 -
MySql中事务隔离级别的演示
一说起mysql中的事务隔离级别,我们都知道有四种,分别是读取为提交的,读取已提交的,可重复读,串行化等等。现在我们来分别演示一下这几种隔离级别。1、准备工作1、开两个窗口,分别都登录mysql2、选择数据库,这里我特意创建了一个test数据库,里面有一张user表3、查询一下user表中数据,没啥太大问题4、关闭自动提交,这一点很重要,两边都要设置。到此为止,我们的准备工作就完成了2、读取未提交1、设置隔离级别为读取未提交 set session transaction isola原创 2020-10-26 15:21:57 · 244 阅读 · 0 评论 -
MySQL中的锁机制
一、锁的分类1.1 对数据的操作类型分类读锁(共享锁):针对同一份数据,多个读操作可以同时进行,不会相互影响写锁(排他锁):当前写操作未完成之前,它会阻断其他的写锁和读锁1.2 对数据操作的粒度分类为了尽可能提高数据库并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但这样锁的数量也会增多,管理锁时比较耗资源的事情。因此数据库系统需要在高并发响应和系统性能两方面进行平衡,这样就产生了锁粒度的概念表锁:开销小,加锁快;不会出现死锁;锁的粒度大,发生锁原创 2020-10-02 16:51:45 · 116 阅读 · 0 评论 -
MySQL中的事务
什么是事务?事务是一组程序逻辑处理单元,要么全部成功,要么全部失败。一、事务的基本要素(ACID)原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。隔离性(Isolat原创 2020-10-02 14:43:16 · 106 阅读 · 0 评论 -
为什么没用Redis做缓存
都知道用Redis作缓存非常的快,但事实上有些时候我们并没有使用Redis来做缓存,而是采用本地缓存的方式。就比如我所接触的一个项目,就没有采用Redis作缓存,而是使用谷歌工具包中的Table来作的缓存。这个Table其实就是一个数据结构,你可以把它当做Map来看待。现在我们来画两幅图,分别是使用Table做缓存和使用Redid做缓存的两种情况使用Table作本地缓存使用Redis作缓存1、访问本地缓存快还是Redis快2、Reids事务3、Redis多一次IO...原创 2020-10-02 12:46:23 · 544 阅读 · 0 评论 -
MySQL存储引擎
在学习存储引擎之前,我们先要搞明白一件事,存储引擎是用来形容表的,并不是用来形容数据库的,数据库中的表是存储在磁盘里的,不同的数据库存储的位置可能有所不同,但是MySQL一般存储在data目录下1、MyISAM存储引擎一张表,如果选择的是使用MyISAM存储引擎,那么它会在磁盘中产生三个文件,分别是后缀名为.frm .MYD .MYI。(其中.frm表示结构 .MYD表示数据 .MYI表示引擎索引)MyISAM索引文件和数据文件是分离的,我们称之为非聚集索引假设我们以字段col1作为索引原创 2020-10-01 17:28:01 · 839 阅读 · 0 评论 -
MySQL索引讲解
1、索引本质Mysql官方表示,索引(Index)是帮助MySQL高效获取数据排好序的数据结构,所以其实说到底,索引其实就是数据结构2、为什么要用索引索引用于快速找出某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySql能够快速到达一个位置去搜索文件,而不必查看所有的数据,那么将会节省很大一部分时间。你可以理解为书的目录,当我们要从一本书中找到某一章节在第几页的时候,就可以通过目录俩查原创 2020-10-01 15:29:52 · 140 阅读 · 1 评论 -
Redis学习
一、Nosql概述二、Redis2.1 简介Redis是完全开源免费,遵守BSD协议,是一个高性能的key-value数据库与其他的key-value缓存产品相比,有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候再次加载使用Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储Redis支持数据的备份,即master-slave模式的数据备份2.2 优势性能极高----Redis读的原创 2020-09-30 19:31:17 · 252 阅读 · 0 评论