首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【DB笔试面试382】请编写触发器:每当在EMPLOYEES表中插入一行数据时,相应部门的职工总人数就加1。

请编写触发器:每当在EMPLOYEES表中插入一行数据时,相应部门的职工总人数就加1。 A 答案 本题考察了后触发器的编写。...PARENT as parent}] [FOR EACH ROW ] [WHEN condition] trigger_body; BEFORE和AFTER指出触发器的触发时机为前触发还是后触发,前触发是在执行触发事件之前触发...,后触发是在执行触发事件之后触发当前所创建的触发器。...UPDATE DEPARTMENTS T SET T.TOTALNUMBER = T.TOTALNUMBER + 1 WHERE T.DEPTNO = :NEW.DEPTNO; END; DB...笔试面试历史连接 http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w About Me:小麦苗 ● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

84610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    长文-InnoDB中的各种锁

    对行级共享锁、排它锁设置过程的影响:当需要表中的某一行设置行级锁时,需要先请求所在表对应的意向锁;而请求的意向锁时需要检测当前表中是否有与之互斥的表级意向锁或排他锁。...当我们使用唯一索引的唯一行进行检索,并且检索到结果时,会对结果行设置记录锁。...当检索的结果包含记录时,该记录的下一个临键锁区间也会被设置临键锁。插入意向(间隙)锁插入意向锁一种用于在INSERT语句进行插入行操作时,对插入行对应的区间设置的一种间隙锁。...插入意向锁是间隙锁,注意和前面提到的意向锁(表级锁)进行区分。为什么需要插入意向锁?为了防止幻读,在执行插入时,需要有一种锁与临键锁/间隙锁进行互斥。...调整事务中SQL的顺序,将update/delete等需要还有锁的语句靠后执行。避免大事务,尽量将大事务拆成多个小事务来处理,小事务发生锁冲突的几率也更小。以固定的顺序访问表和行。

    1K101

    Go高级之Gin框架和Mongodb数据库的联动

    } 在这边,我第一次连接的时候,就开始插入数据了,具体数据结构,我定义在了其他包里面,第一次连接数据库时插入数据是由于MongoDB是一种无模式(Schema-less)的数据库。...在MongoDB中,文档可以有不同的结构,不同的文档可以有不同的字段和数据类型。 当我们第一次连接MongoDB数据库时,如果没有插入数据,那么数据库中就不会有任何文档。...而在实际应用中,我们通常需要在数据库中创建一些初始数据,以便后续的操作和查询。因此,我们可以在第一次连接数据库时,往表中插入一些初始数据,以满足应用程序的需求。...另外,MongoDB在插入数据时会自动创建集合(Collection),如果集合不存在的话。因此,即使在第一次连接数据库时没有创建集合,也可以在插入数据时自动创建。...这也是为什么在第一次连接数据库时就可以往表中插入数据的原因之一。

    1.2K43

    8000字长文,MySQL中的锁机制解密

    下面是表级锁的常见场景: **批量插入:**当你需要在短时间内向数据库表中插入大量数据时,可能需要使用表锁。这是因为在这种情况下,行锁可能会导致过多的开销。...插入意向锁是间隙锁,注意和前面提到的意向锁(表级锁)进行区分。 插入意向锁通常应用于索引数据结构中,特别是在B树索引中。在B树索引中,数据是按照键值的顺序存储的,每个键值之间都有一个间隙。...如果没有插入意向锁,那么可能会出现以下情况: T1开始执行,检查到id为2的位置没有记录,所以它开始插入新的记录。...在T1还没有完成插入操作的时候,T2开始执行,也检查到id为2的位置没有记录,所以它也开始插入新的记录。 结果,T1和T2都在id为2的位置插入了新的记录,导致了数据不一致。...自增字段是数据库中的一种特殊字段,每当插入一条新的记录时,它的值会自动增加。 例如,假设我们有一个表,其中有一个自增字段id。每当我们插入一条新的记录时,id的值就会自动增加1。

    46810

    innodb为什么选择B+ Tree而不是跳表,Redis为什么选择跳表而不是B+ Tree

    为了让链表也能支持二分查找,我们可以在链表的基础上加上一层目录,即一层索引链表: 当我们访问某个节点时,先访问索引链表,通过索引链表进行二分过滤,在索引链表找到结点后,顺着索引链表的结点向下,找到原始链表的结点...---- 跳表和B+ tree相同之处 相同: B+树和跳表都是在最底层包含所有用户数据,并且都是按顺序排列,时候范围查询 B+树和跳表利用索引层实现二叉查看,从而提高性能 不同之处也就是二者使用场景的区别了...---- 跳表和B+ tree在数据插入方面的性能 B+ tree插入性能分析 B+ Tree本质是一种多路平衡树,关键在于"平衡"二字,它的含义是子树们的高度层级尽量一致(最多差一个层级),这样在搜索的时候...当我们向数据库表不断插入记录时,为了维持B+树的平衡,B+树会不断分裂调整数据页。...---- 跳表插入性能分析 当我们需要往跳表中插入数据时,是通过随机函数产生当前节点的层数,然后更新每一层索引,往其中加入一个节点,如果当前层数不足,就新添加一个索引层。

    2.4K20

    【数据结构】第二章——线性表(3)

    0,当小于1时,对应的数组下标就为负数,此时无法放入数组中; 当i=L->length+1,表示的是在顺序表的表尾进行插入,如果i>L->length+1,表示的是此时的元素是插入到其他位置,这个位置与表中的最后一个元素没有做到物理位置上相邻这个要求...则打印插入后的顺序表,不成功则提示插入失败,测试结果如下所示: 可以看到,当我们第三次想要在位序为4的位置插入元素4时,结果是插入失败;当我们将元素4和5都放入顺序表后,再插入元素3,此时元素4和5有往后进行移动...; 删除元素与插入元素原理相同的,当我需要删除一个元素时,我只需要将这个元素后面的元素往前移动就可以完成删除操作了,如下所示: 在删除时,我们同样需要对删除对象的合理性进行判断,接下来我们就来看看删除的格式...按值查找操作LocateElem(L,e):在表L中查找具有给定关键字值的元素; 按位查找操作GetElem(L,i):获取表L中第i个位置的元素的值; 简单的理解就是一个通过给定值,来查找顺序表中有没有该元素...[i] == e) return i + 1;//返回对应的位序 } return 0;//没有找到则返回0 } 按值查找的查找方式这里我是一顺序查找举例,在顺序表中,因为元素在逻辑上也是相邻的

    14810

    2、数据库相关

    对数据进行增删改的频率不高,查询非常频繁。 没有事务 InnoDB适合的场景 数据库锁的分类 按锁的粒度划分:表级锁、行级锁、页级锁 按锁级别划分:共享锁、排它锁。...但是理论上,可重读读隔离级别还是无法解决另外一个幻读的问题,指的是当某个事务在读取某个范围内的记录时,另外一个事务也在该范围内插入了新的记录,当之前的事务再次读取该范围内的记录时,会产生幻行。...DB_ROW_ID: 行号,包含一个随新行插入而单调递增的行id,当有InnoDB自动产生索引时,聚集索引会包含这个行id的值,否则这个行id不会出现在任何索引中。...具体锁的范围的官方文档如图8所示,在这里我们删除id为9的数据时要锁的范围是(6,9],(9,11]上锁,当我们向其中插入数据时会上锁。...效果: 查出的数据首先放在一级缓存中,只有一级缓存被关闭或者提交以后,一级缓存数据才会转移到二级缓存 查询顺序: 缓存首先一进来去查二级缓存,二级缓存没有去找一级缓存,一级缓存没有去找数据库。

    21230

    实时同步MongoDB Oplog开发指南

    Capped Collections MongoDB有一种特殊的Collection叫Capped collections,它的插入速度非常快,基本和磁盘的写入速度差不多,并且支持按照插入顺序高效的查询操作...Capped collections的大小是固定的,它的工作方式很像环形缓冲器(circular buffers), 当剩余空间不足时,会覆盖最先插入的数据。...比如说name属性为'abc',则只能修改成3个字符的字符串,否则操作将会失败; 数据不允许删除,如果非删除不可,只能drop collection 不支持sharding 默认只支持按自然顺序(即插入顺序...)返回结果 Capped collections可以使用$natural操作符按插入顺序的正序或反序返回结果: db['oplog.rs'].find({}).sort({$natural: -1})...,表示某一秒内的第几次操作 开始同步Oplog 在开始同步Oplog之前,我们需要注意以下几点: 由于Oplog不使用索引,所以初始查询代价可能很大 当Oplog数据量很大时,可以保存ts,系统重启时利用该

    2.6K80

    InnoDB解决幻读的方案--LBCC&MVCC

    例:我们在操作数据库时,事务提交或者回滚都会直接改变数据库中的值。...在InnoDB中按锁的模式来分的话可以分为共享锁(S)、排它锁(X)和意向锁,其中意向锁又分为意向共享锁(IS)和意向排它锁(IX)(此处先不做介绍,后期会专门出篇文章讲一下InnoDB和Myisam引擎的锁...(1)DB_TRX_ID:事务ID,是根据事务产生时间顺序自动递增的,是独一无二的。如果某个事务执行过程中对该记录执行了增、删、改操作,那么InnoDB存储引擎就会记录下该条事务的id。...如下图,我们将按照里面的顺序执行sql ? 当我们执行到第7行的select的语句时,会生成readview[100,200],300,版本链如图所示: ? 此时我们查询到的数据为lilei300。...我们按上边操作,从最新版本依次往下匹配,我们首先要拿最新版本的数据trx_id=100来readview中匹配,落在黄色区间内,一看该数据在未提交的数组中,且不是自己的事务,所以是不可见的;然后我们选择前一个版本的数据

    77120

    图解|12张图解释MySQL主键查询为什么这么快

    当我们没有设置主键的时候,为了防止这种情况,InnoDB会优先选取一个Unique键作为主键,如果表中连Unique键也没有的话,就会自动为每一条记录添加一个叫做DB_ROW_ID的列作为默认主键,只不过这个主键我们看不到罢了...下面我们补充一下行格式 行格式v2 再次强调 我画的字段的顺序并非在存储设备中实际存储的顺序 只有在InnoDB实在无法确定主键的情况下(创建时不指定主键,同时没有Unique键),才会添加DB_ROW_ID...说到这,顺便谈一谈为什么推荐使用自增ID作为主键,而不推荐使用UUID? 除了UUID主键索引占据大量空间的问题之外,在插入数据的资源开销上,自增ID也远小于UUID。...而UUID不同,它的大小顺序是不确定的,后来插入的记录有可能(而且概率相当大)插入到上一条记录之前(甚至是当前数据页之前),这就意味着需要遍历当前数据页的记录(或者先找到相关的数据页),然后找到自己的位置进行插入...接下来我们向表中多添加几条数据,看看分组到底是什么回事儿?需要注意的是,由于我们已经在表中指定了主键id,因此DB_ROW_ID这个参数不会再画出来了。

    82510

    MySQL记录删除后竟能按中间被删除的主键加回去,磁盘空间被重用!——底层揭秘MySQL行格式记录头信息

    但是在一开始生成页的时候,其实并没有User Records这个部分,每当我们插入一条记录,都会从Free Space部分(也就是尚未使用的存储空间) 申请一个记录大小的空间,并将这个部分划分到User...2.这里把隐藏列省略了,归并到 “其他信息” 里面了   看到这里,你一定和我有着相同的疑问,为什么next_record显示36,它表示本条记录真实数据部分到下一条记录真实数据的距离。...从上表中可以看出:InnoDB存储引擎会为每条记录都添加 DB_TRX_ID和 DB_ROLL_PTR这两个列,但是 DB_ROW_ID是可选的(在没有自定义主键以及不允许存NULL值的Unique键的情况下才会添加该列...始终会维护记录的一个单向链表,链表中的各个节点是按照主键值从小到大的顺序链接起来的。...INSERT INTO record_test VALUES(2, 200, 'bb哈哈'); 可以看到,刚刚删除的第二条数据又回来了 内存结构变化如下 InnoDB并没有因为新记录的插入而为它申请新的存储空间

    92210

    【Rochester】MongoDB的基本语法和使用

    1.2 查看所有数据库命令 1. show dbs 2. show databases * 两者任选其一即可 注意:在MongDB中,集合只有在内容插入后才会创建。...1.3 查看当前使用的数据库 db 注:MongDB中默认的数据库为test,如果你没有选择数据库,集合将默认存放在test数据库中 1.4 删除数据库 db.dropDatabase() 注:主要用于删除已经持久化的数据库...如果为真,则按顺序插入数组中的文档,如果其中一个文档出现错误,MongoDB将返回而不处理数组中的其余文档。如果为假,则执行无序插入,如果其中一个文档出现错误,则继续处理数组中的主文档。...的字段,这个相当于关系型数据库中表的主键,当我们在插入文档记录时没有指定该字段,MongDB会自动创建,其类型是ObjectID类型。...在3.0版中进行了更改:当使用upsert:true执行update()时,如果查询使用点表示法在_id字段上指定条件,则MongoDB将拒绝插入新文档。

    2.6K10

    【翻译】MongoDB指南引言

    在Mongo shell中,选中一个数据库使用如下命令:use db> ,例如: use myDB 创建数据库 如果待操作的数据库不存在,那么在第一次向MongoDB 存储数据时,MongoDB会创建这个数据库...3.3.2行为 插入顺序 固定集合保证了插入顺序,因此对于查询操作而言,不需要索引的支持就可以返回多个按顺序排列的文档。没有索引的开销,固定集合支持更高的插入吞吐量。...在无索引的情况下,文档插入固定集合的速度与将日志信息写入文件系统的速度相似。此外,先进先出的特性保证了事件的顺序,同时管理了存储的使用。 在固定集合中缓存少量数据。..._id字段 在MongoDB中,文档需要_id字段作为主键,如果插入文档时没有指定_id字段,MongoDB会使用ObjectIds 作为默认的_id的默认值。...对于BinData 类型,按下面顺序排序: 1.首先,按数据的长度或大小排序。 2.然后,按BSON一个字节子类型排序。 3.最后,一个字节一个字节地比较。

    4.3K60

    ClickHouse(14)ClickHouse合并树MergeTree家族表引擎之VersionedCollapsingMergeTree详细解析

    VersionedCollapsingMergeTree用于相同的目的折叠树但使用不同的折叠算法,允许以多个线程的任何顺序插入数据。特别是,Version列有助于正确折叠行,即使它们以错误的顺序插入。...如果需要快速写入数据,则不能接受更新,但可以按如下顺序将更改写入对象。使用 Sign 列写入行时。如果Sign=1这意味着该行是一个对象的状态(让我们把它称为“state”行)。...数据越简单,效率就越高。 SELECT结果很大程度上取决于对象变化历史的一致性。准备插入数据时要准确。不一致的数据将导致不可预测的结果,例如会话深度等非负指标的负值。...当ClickHouse合并数据部分时,它会删除具有相同主键和版本但Sign值不同的一对行.行的顺序并不重要。 当ClickHouse插入数据时,它会按主键对行进行排序。...我们使用两个创建了两个数据部分INSERT查询。该SELECT查询是在两个线程中执行的,结果是行的随机顺序。由于数据部分尚未合并,因此未发生折叠合并。

    23910

    为什么MySQL的主键查询这么快

    图片当我们没有设置主键的时候,为了防止这种情况,InnoDB会优先选取一个Unique键作为主键,如果表中连Unique键也没有的话,就会自动为每一条记录添加一个叫做DB_ROW_ID的列作为默认主键,...下面我们补充一下行格式图片再次强调我画的字段的顺序并非在存储设备中实际存储的顺序只有在InnoDB实在无法确定主键的情况下(创建时不指定主键,同时没有Unique键),才会添加DB_ROW_ID列3.2...说到这,顺便谈一谈为什么推荐使用自增ID作为主键,而不推荐使用UUID?除了UUID主键索引占据大量空间的问题之外,在插入数据的资源开销上,自增ID也远小于UUID。...而UUID不同,它的大小顺序是不确定的,后来插入的记录有可能(而且概率相当大)插入到上一条记录之前(甚至是当前数据页之前),这就意味着需要遍历当前数据页的记录(或者先找到相关的数据页),然后找到自己的位置进行插入...接下来我们向表中多添加几条数据,看看分组到底是什么回事儿?需要注意的是,由于我们已经在表中指定了主键id,因此DB_ROW_ID这个参数不会再画出来了。

    4.1K92

    Java集合解惑

    ,要求在迭代过程中容器不能发生结构性变化(添加、插入、删除,修改数据不算),否则这些索引位置数据就失效了,避免的方式就是使用迭代器的 remove 方法。...,当数组长度不够时,其内部会创建一个更大的数组,然后将原数组中的数据拷贝至新数组中,而 LinkedList 是双向链表结构,内存不用连续,所以用多少申请多少。...答案: 当我们往 HashMap 中 put 元素时,先根据 key 的 hash 值得到这个元素在数组中的位置(即下标),然后把这个元素放到对应的位置中,如果这个元素所在的位子上已经存放有其他元素就在同一个位子上的元素以链表的形式存放...所以如果你正在编写一个值类,它具有非常明显的内在排序关系,比如按字母顺序、按数值顺序或者按年代顺序,那你就应该坚决考虑实现 Comparable 这个接口, 若一个类实现了 Comparable 接口就意味着该类支持排序...LinkedHashMap 支持插入顺序或者访问顺序,LRU 算法其实就要用到它访问顺序的特性,即对一个键执行 get、put 操作后其对应的键值对会移到链表末尾,所以最末尾的是最近访问的,最开始的最久没被访问的

    67220

    9种分布式ID生成之 美团(Leaf)实战

    [在这里插入图片描述] Leaf为啥要这么设计呢? Leaf 希望能在DB中取号段的过程中做到无阻塞!...当号段耗尽时再去DB中取下一个号段,如果此时网络发生抖动,或者DB发生慢查询,业务系统拿不到号段,就会导致整个系统的响应时间变慢,对流量巨大的业务,这是不可容忍的。...这里做了一个实验,号段设置长度为step=10,max_id=1, [在这里插入图片描述] 当我拿第一个ID时,看到号段增加了,1/10 [在这里插入图片描述] [在这里插入图片描述] 当我拿第三个Id...时,看到号段又增加了,3/10 [在这里插入图片描述] [在这里插入图片描述] Leaf采用双buffer的方式,它的服务内部有两个号段缓存区segment。...Leaf中workId是基于ZooKeeper的顺序Id来生成的,每个应用在使用Leaf-snowflake时,启动时都会都在Zookeeper中生成一个顺序Id,相当于一台机器对应一个顺序节点,也就是一个

    3.2K20

    Java 集合常见知识点&面试题总结(上),2022 最新版!

    Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。...当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,...// person对象没有实现Comparable接口,所以必须实现,这样才不会出错,才可以使treemap中的数据按顺序排列 // 前面一个例子的String类已经默认实现了Comparable接口...无序性不等于随机性 ,无序性是指存储的数据在底层数组中并非按照数组索引的顺序添加 ,而是根据数据的哈希值决定的。 2、什么是不可重复性?...ArrayDeque 插入时可能存在扩容过程, 不过均摊后的插入操作依然为 O(1)。虽然 LinkedList 不需要扩容,但是每次插入数据时均需要申请新的堆空间,均摊性能相比更慢。

    32320
    领券