数据库
文章平均质量分 64
数据库的详细经验
学习时长两年半的小学生
我要一步一步往上爬~
展开
-
数据仓库分层概念
ODSOperational Data Store 操作数据存储(贴源层)指的是从数据源中经过Extract(数据抽取)-Transform(数据转换)-Load(数据加载)获取到的数据存储到该层。不是简单的数据换个地方存,而是经过了一定的过滤,去重,还原,清洗工作后保存的一层数据。跟源数据最贴近,但不是源数据的一层数据存储层,为整个数仓的加工数据提供来源的一层。例如通过Kafka增量获取通过FlinkJob进行过滤去重清洗,保存到ODS层的TiDB/ClickHouse/Hive之类的存储服务上。原创 2021-10-22 11:16:35 · 783 阅读 · 0 评论 -
关于MybatisPlus雪花ID @TableId(type = IdType.ASSIGN_ID) 注解不生效问题
问题描述:@TableId(type = IdType.ASSIGN_ID) 注解不生效,无法生成雪花ID,我用了XML SQL 和 @Insert注解SQL方式都不行,也查了很多资料,有的说主键列必须是String,有的说必须是Long解决问题:使用了该注解,就必须用MybatisPlus中的BaseMapper自带的Insert方法,也就是一张表针对一个对象做的增删改查。手写的SQL一律不生效!而我的业务刚好没那么好对应关系,就是说我从一个对象会解析出N张表的数据填充,于是只能选择其他方式。方法:原创 2021-10-19 10:41:04 · 13722 阅读 · 0 评论 -
Mybatis列与实体类ORM映射失效解决方法
ORM框架的映射正常来说只要遵循规则,都是可以映射到的。要注意以下几个点(1)开启驼峰映射规则在项目的properties文件中添加:mybatis.configuration.map-underscore-to-camel-case=true或者,在mybatis-config.xml(2)确保POJO类遵循了驼峰命名例如:数据库中列名叫:create_timepojo中属性就应该叫:createTime如果pojo中叫createDate,又不好随便改,牵涉的旧代码很多,怎原创 2021-07-30 10:36:27 · 773 阅读 · 0 评论 -
Mysql中的冗余索引和重复索引
(1)重复索引:指的是在对应列上,以相同的顺序不同的索引名称建立了多套一模一样的联合索引(单值索引也有,不过相对来说没那么奇葩做这种事),例如:ALTER TABLE a ADD INDEX ‘idx_1’ (‘id’,’name’,’sex’)ALTER TABLE a ADD INDEX ‘idx_2’ (‘id’,’name’,’sex’)ALTER TABLE a ADD INDEX ‘idx_3’ (‘id’,’name’,’sex’)这三个就是重复索引,占用三倍的索引磁盘存储空间,降低原创 2021-07-23 16:35:26 · 2686 阅读 · 0 评论 -
Mybatis中的一二级缓存通俗易懂解析
前言:缓存我们都知道,是把数据存放在内存中,依靠内存的高速读写能力提高查询效率,那么mybatis中的一二级缓存又是什么呢?有什么区别呢?我们一上来先不说概念,以更简单理解的角度入手(1)实际业务需求假设有个业务需求,需要读取Hbase中二进制格式的数据,要我们设计一个类似ORM(Object Relational Mapping 对象关系映射)映射的功能,我们会怎么做?这一块我在自定义注解中读取Hbase列族列名解析后映射到对应的对象中做过,只需要遵循一定规范,常见例如驼峰,例如蛇形,甚至自己.原创 2021-07-19 16:26:55 · 445 阅读 · 1 评论 -
TiDB两阶段提交(乐观事务与悲观事务)
学习TiDB事务的底层原理思想,总结一下自己的理解官方文档乐观事务:一种与传统分布式事务不同的解决方案,不一定会加锁,能够实现跨节点的分布式事务安全,如果写冲突不频繁,那么可以通过跳过获取行锁而提高性能,如果写同一行冲突频繁,性能会低于悲观事务下面请对照着官网的一张图,配合理解乐观事务的实现(1)客户端事务开始,TiDB接到begin后,向PD管理层申请一个time stamp (下面简称ts)做为事务起始编号 start_ts .(2)执行客户端SQL:1:读请求,则先向PD获取Regio原创 2021-04-27 17:45:02 · 1028 阅读 · 0 评论 -
TiDB动态扩容与集群配置重置
场景一:一开始只是在开发环境搭建了低配单机版(PD,TiKV,TiDB,TiUP,Monitor都在同一台服务器),使用后觉得不错,想扩容两个TiKV,因为已经存在了部分数据,不可能卸载重装,所以就找了官网动态扩容的方案操作https://docs.pingcap.com/zh/tidb/stable/scale-tidb-using-tiup(1)新增配置文件:(与topology.yaml同级)vi scale-out.yaml写入(因为我这里只扩容TiKV,所以只需要配tikv_servers原创 2021-04-23 17:30:23 · 684 阅读 · 0 评论 -
TiDB几个重要生态工具
官方文档https://docs.pingcap.com/zh/tidb/stable/hardware-and-software-requirements网上的概念: TiDB 是一款定位于联机事务处理/联机分析处理( HTAP: Hybrid Transactional/Analytical Processing)的融合型数据库产品,结合了传统的行式存储数据库服务和NoSql非关系型数据库的特点,实现了一键水平伸缩,支持无限水平扩展,引入MVCC多版本控制协议保证数据强一致性(可以防止脏读幻读不可重原创 2021-04-23 16:31:49 · 463 阅读 · 0 评论 -
TiDB配置文件常见坑
(1) net.core.somaxconn = 128, should be greater than 32768net.core.somaxconn是Linux中的一个内核(kernel)参数,表示socket监听(listen)的监听队列上限。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当Server处理请求较慢时,导致监听队列被填满后,新来的请求就会被拒绝。FIX:vi /etc/sysctl.conf新增:net.core.soma原创 2021-04-23 15:49:55 · 3457 阅读 · 0 评论 -
TiDB集群部署(Centos7 * 3)
(1)安装TiUP1.下载 : curl --proto ‘=https’ --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh2.设置环境变量:source .bash_profile3.安装 TiUP cluster 组件:tiup cluster4.升级TiUP cluster组件版本:tiup update --self && tiup update cluster(2) 写配置文件1.直接下载配置原创 2021-04-23 15:39:18 · 535 阅读 · 0 评论 -
自增ID,UUID,雪花ID的使用
主键ID主要有:数据库自增主键uuid雪花ID数据库的自增主键:从大学做实验开始就一直用自增主键,以前也没考虑过用自增主键有啥问题,直到工作后…(1)首先自增主键不适用于分库分表情况,在做数据集合的时候会出现主键重复问题,做多个系统的数据汇总也会有冲突(2)其次,详情…删除…查询…这些接口如果都是依赖着自增主键做操作,很容易有安全性问题(这是测试同学做渗透测试的时候告诉我的),同时很容易造成越权(掌握你自增主键的规律然后一定程度上越过某些校验获取数据)所以以后再给我好好设计数据库的话,我都不原创 2021-04-07 11:39:19 · 2964 阅读 · 0 评论 -
设计LRU缓存结构(Java实现)
(1)是什么?Least Recently Used (最近最少使用)缓存淘汰算法中的一种。因为缓存是保存在内存中的,内存是很吃紧很宝贵的,所以要保证最热点的数据做缓存,冷门数据淘汰。(2)具体在哪些场景使用?Mysql的缓冲池,Linux OS 的虚拟文件系统VFS都有用到。(3)具体实现步骤?既然是缓存,那肯定就是List中存放着一大串 Key - Value 结构,我们查找目标数据的时候就是for这个List找到对应的Key,这个List可能很长,所以我们可以把热点数据排到较前面,冷门的放原创 2021-01-18 10:43:05 · 1950 阅读 · 1 评论 -
SQL优化之谓词下推
(1)什么是谓词?谓词,用来描述或判定客体性质、特征或者客体之间关系的词项。意思就是,一个判断的动作或者形容某样东西的一个特征。(2)什么是谓词下推?将过滤条件表达式(=、!=、like、in、between、>、<…)尽量靠近要过滤的数据源,达到尽早过滤无用数据的目的。(3)有什么好处?例如有表:Student 学生, Grade 分数业务:查询出所有100分成绩的学生,用S_id做关联键SQL :SELECT * FROM Student t , Grade gWHERE原创 2021-01-08 11:46:27 · 4618 阅读 · 2 评论 -
Kafka中HW和LEO和副本的关系
HW :High Water 最高水位LEO:Log End Offset 数据日志文件结束偏移量先看图吧:假设AB两个副本都是Topic的,B是Leader,A是follower,A数据同步明显滞后,这个时候用户能读取的数据,最多能消费到最高水位HW = 6 的位置,但是这两副本(Leader和Follower)它们的LEO是不一样的,A是6,B是8,但是它们的HW却一样。我们可以把它看作是木桶短板效应,用户能用多少水,要看最高水位能装到多少,最高水位限制于LEO最后数据日志文件偏移量。与副本原创 2020-12-21 17:56:53 · 629 阅读 · 1 评论 -
zookeeper is not a recognized option Kafka报错
创建消费者的时候报的问题:./kafka-console-consumer.sh --topic XX–zookeeper localhost:2181 --from-beginning改成:./kafka-console-consumer.sh --topic XX–bootstrap-server localhost:2181 --from-beginning 创建成功创建消费者的时候,如果是 --zookeeper ,那么消费者生产的信息(偏移量等)会被保存到ZK里面。如果是–bootstrap-原创 2020-12-21 17:32:40 · 666 阅读 · 0 评论 -
Kafka+SpringBoot多线程消费与分区消费踩过的坑
创建Topic的时候,可以置顶分区数和副本数,在kafka/config/sever.properties文件修改num.partitions = ? 即可定义你的默认分区数~在SpringBoot集成中,我们只需要配置:@KafkaListener(topics = “test_topic” ,groupId = “test”,concurrency = “3”) 就可以实现监听消费。https://blog.csdn.net/whiteBearClimb/article/details/109532原创 2020-12-21 17:06:40 · 5610 阅读 · 1 评论 -
Kafka中的Offset偏移量+新老版本偏移量位置的改动
我们Kafka中的message,既然是写在XXXXXX.log文件中,不管存了多少数据,只要超过1G大小,就又开启一个新的Log文件存message,文件内部分多个segment分段。文件命名就是segment分段的起始位置命名,例如:第一个segment分段:0000000000.log(包含message0~37)、第二个segment分段0000000038.log(包含message38~75)、第三个segment分段00000000076.log(包含message76~113)… 第N个原创 2020-12-21 14:47:00 · 2252 阅读 · 0 评论 -
Linux如何查看Kafka版本
YUM 安装方式在 /etc/下可以找到Ambari + HDP 安装方式在 /usr/hdp/3.1.4.0-315/kafka查看Kafka版本:/usr/hdp/3.1.4.0-315/kafka/libs下的文件信息即可看到原创 2020-12-18 17:47:43 · 5152 阅读 · 1 评论 -
Kafka中的AR,ISR,OSR
在查看topic详细信息的话可以看到有个Isr,一开始不明所以,于是深入去学习了,不看不知道一看吓一跳:首先要引出一个问题,为什么要存在这些东西:在数据同步的时候,如果发生leader死掉,并且重新选举的leader能力不强(数据同步速度慢,数据同步不全面),会造成一群follow跟着一个傻逼leader。造成脏数据。所以我们就要知道哪些副本能力是较强的,同步数据是最快最完整的,在leader发生问题后第一时间补上。AR:Assigned Replicas 总的分配副本OSR:Out-of-Syn原创 2020-12-18 17:46:23 · 4748 阅读 · 4 评论 -
Kafka基本概念及其入门级问题问答
(1)Kafka是什么?它是为了解决大数据实时传输处理的一个中间件,基于发布订阅模式设计的,可以看作是MQ,也可以当作数据库使用(不推荐)。上图再看概念:Producer:数据的生产者。Kafka Cluster:Kafka集群。Broker:Kafka Cluster集群下会有多个Broker,就是一个个Kafka集群中的节点。Topic:主题,做消息类型分类。Kafka是基于发布订阅模式的,所以主题就是供消费者们订阅的。Partition:分区,提高主题的负载能力,不管是读写,都能分散到原创 2020-12-18 17:22:34 · 150 阅读 · 1 评论 -
ClickHouse物化视图
概念:物化视图是指通过SQL语句从一张表或者多张表查询出来的数据集做持久化存储,针对分布式表做的分布式物化视图不会随着基础表数据变化而变化。单节点的表通过SQL更新可以通过自带的触发器同步数据到物化视图中。所以,一定程度上物化视图可以看作是‘快照’;物化视图与表非常类似,数据存储格式也是由创建视图时指定的表引擎决定,是一种很明显的空间换时间的提高查询效率的方法。网上还有很多概念说,物化视图是完全与源表脱离的,任何数据更新都不会主动同步到物化视图中,这一种博文基本都是没实操,英文翻译水平还很菜那种从官网照搬原创 2020-12-16 16:57:48 · 6744 阅读 · 1 评论 -
ClickHouse表引擎简单介绍
ClickHouse的表引擎跟我们耳熟能详的Mysql表引擎差别很大,它功能更加强大作用:(1)数据存储位置(内存或者磁盘)(2)操作方式和操作限制(3)并发和多线程限制(4)是否可以使用索引(5)数据备份,分片等等限制(6)指定数据源读取有以下几种:Log:日志表引擎不支持索引,采用类似稀疏索引的方式存储数据,标志位和偏移量来指定多线程并行读取数据,指定开始读取的位置和指定跳跃行数。写操作会阻塞读操作,读操作也会阻塞写操作,如果写入数据表失败,就会导致数据损坏,读取报错。适合存储临时原创 2020-12-14 18:33:06 · 677 阅读 · 0 评论 -
ClickHouse库表结构与结构文件
基于上面一篇博客:ClickHouse集群环境下的分布式建库建表,插入/查询数据,自定义CSV文件数据导入继续来学习~~~yum安装的ClickHouse创建的数据库和表默认在:/var/lib/clickhouse/data 下。数据库和表层级都是一个文件夹,列数据是一个个.bin文件,一列存在一个文件里面,存储压缩后的数据吗,三条数据分了三个文件夹,每个文件夹下面就一条数据,如果是MergeTree引擎的数据表,命名规则用日期类型分区,表文件夹下的数据文件夹就是类似于:20201214_2_2_0原创 2020-12-14 17:17:08 · 4029 阅读 · 0 评论 -
ClickHouse集群环境下的分布式建库建表,基本数据操作数据,自定义文件格式数据导入
万丈高楼平地起,经过前几篇的学习折磨,默认都是已经搭建起ClickHouse集群环境的了,现在这篇文件是简单介绍基本使用。注意ClickHouse的分布式,也摆脱不了CAP的束缚,所以数据写入都是异步的,做数据同步都是先写入本地磁盘,再同步到其他分片区,yum安装方式的可以在/var/lib/clickhouse/data/database/table/查看ClickHouse的数据是否同步完成。(1)分布式建库:其实也就是在集群中建库,让所有节点都同步创建:create database jojo_原创 2020-12-11 16:24:00 · 6311 阅读 · 4 评论 -
最简单的ClickHouse集群搭建
用最少的废话,做最踏实的事,我自己搭建这个集群环境也踩了坑,也查了很多资料,网上很多资料,说实话都是复制粘贴的,或者有的根本没说全面的,更有甚者只说了个概念,具体怎么配置,文件怎么修改都没说。所以做这篇记录的同时,也希望帮助到更多人。(1)第一步肯定是在你集群机器(三台或以上)安装和启动ClickHouse,在我另外一篇博客记录。ClickHouse下载安装和启动(2)第二步是你必须掌握并且基本会用ZooKeeper,并且已经在集群机器上配好了Zookeeper集群,最少一个leader两个follo原创 2020-12-11 09:46:24 · 1003 阅读 · 0 评论 -
ClickHouse资源配额小手册
这个配置其实也是在Users.xml里面的,为啥跟权限控制分开记录博客呢?主要是因为这块内容相对比较独立。这块功能更强大,我们指定一个时间间隔,在这个间隔内发生的错误率,查询次数,(读取/查询/返回)行数限制,执行时间长短(猜测是秒,文档没有注释,未测试,但是按照配置是秒的尿性来看应该也是秒) 都能做限制<!-- Quotas. --> <quotas> <!-- Name of quota. --> <default&g原创 2020-12-10 15:16:39 · 728 阅读 · 0 评论 -
ClickHouse的多用户权限配置管理
我们安装好Click house后都是通过default用户登录,如果想自己实现自定义的用户权限控制管理就要详细读懂users.xml文档,我翻译出来了:<users> <!-- If user name was not specified, 'default' user is used.如果用户名没有特别指定,默认使用default用户 --> <default> <!-- Password could b原创 2020-12-10 14:53:49 · 1873 阅读 · 0 评论 -
ClickHouse下载安装和启动
号称比Mysql快900倍的新时代存储引擎。(1)使用脚本下载yum源curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash(2) yum 安装 server 以及 clientsudo yum install -y clickhouse-server clickhouse-client(3)查看是否安装完成sudo yum list installed原创 2020-12-10 14:35:52 · 1032 阅读 · 0 评论 -
一段话理解稠密索引和稀疏索引
大家都是索引,稠密索引是每条数据都存,稀疏索引是跳跃式的隔着固定一段距离再存下一个key。稠密索引稀疏索引特点就是:稀疏索引需要的空间小,占用内存也小,但是查询次数更多,速度较慢。稠密索引占用空间大,但是查询次数更少,速度更快。(要么空间换时间,要么时间换空间)实际运用中:Kafka:Kafka存放segement数据段就是采用的稀疏索引,针对一个topic主题下进行的partition物理文件做分区,每个partition内部又分成多个segment,segment里面存的才是一条条原创 2020-12-07 18:37:06 · 4294 阅读 · 1 评论 -
笛卡尔积
度娘概念图Mysql中,如果我们from A ,B 连表做条件查询,Mysql其实是拿两张表的全部数据做了一次笛卡尔积,然后生成全部的组合数据存储到一张新的临时表。然后再通过简单的判断去获取where XX 做条件筛选。在实际工作中,我们也可以是用这种方式很轻松处理一些复杂的业务逻辑。例:考勤表与人员表做笛卡尔积,可以知道谁在哪天缺席…文案素材库与图片素材库做笛卡尔积,可以组合出所有可能的排列组合…它的实现也非常简单:看到这里,是不是明白了SQL优化中有一条:连表查询时,尽量用小表驱动大原创 2020-11-27 11:50:23 · 426 阅读 · 0 评论 -
ElasticSearch的RestFull API 简单使用命令
查看所有的索引:http://localhost:9200/_cat/indices?v获取所有集群节点列表:localhost:9200/_cat/nodes?v检查集群健康状态:localhost:9200/_cat/health?v新建索引:创建类型和数据查询数据更新查询某个索引下的所有类型的所有数据查询某个索引下的某个类型的所有数据只返回一个(如果不做限制,默认返回10)根据索引下标分页(这里是指从下标1开始,拿一条,也就是第二条数据)根据某个字段降序(升序是原创 2020-10-29 16:22:59 · 430 阅读 · 0 评论 -
SpringBoot+Mybatis配置多数据源
基于数据库一主多从的基础上,做读写拆分缓解数据库压力,或者在分库的基础上,对热点数据库做数据水平分表,这些都是很常见的优化行为。具体配置可以看:Mysql数据库主从复制同步手把手教学(Mac版配置 + Windows版配置 + 踩坑)既然那么多库,那么代码中我们就要连接多个数据源,那么废话不多说,开始动手我们都知道Mybatis它也是遵循着JDBC规范,要指定对应的Mapper接口对其进行动态代理,其次通过启动的时候Configuration读取配置文件,后续从里面获取用户名,驱动包,密码,端口号,原创 2020-10-29 11:23:59 · 752 阅读 · 0 评论 -
MySql中的undo.log
前言:关于Mysql底层比较难理解的三种日志,虽然外面面试问的较少,问到的也是一些大厂,但是学习不是为了蒙混面试官的,是为了自己的,所以我相信,熟读事务支持的三种日志,会给我们设计分布式事务或者更加复杂的业务场景带来很大帮助。(1)是什么?常见场景和用法?undo.log 也称之为回滚日志,主要用于做事务的数据回滚。更直白的说法,就是做数据回滚恢复的,保证事务的原子性,一个操作失败,全部操作回滚。undo.log属于逻辑日志,逻辑日志的意思就是它属于一种理论逻辑,就是按道理说当前行在“某些条件下”~‘原创 2020-10-24 19:08:10 · 648 阅读 · 0 评论 -
数据库三范式
三范式是一位英国数据库开发者提出来的,要求在设计数据库表结构过程中必须要遵守的规则。也可以说是一个约定或者约束。第一范式:保证每列字段的原子性这是为了我们操作方便的一个规范,假设一个字段叫“地址”,这个就很容易不符合第一范式,因为还可以拆分出“省份”“市”“区”“县”“门牌号”之类的,在修改地址的时候,只能统一全部编辑修改,或者用字符串分割的方式来修改,非常难受。第二范式:每一列的字段都与该列主键相关这个规范的意思是说比如我有一张订单表,那么我这张表记录的应该是跟订单详情有关的东西,比如“下单时间”原创 2020-09-10 15:22:53 · 218 阅读 · 0 评论 -
JDBC底层源码解读(一位瘫痪多年的朋友看完后飞檐走壁,至今下落不明)
什么是JDBC?一百个实习生和应届生一百个都说是连接和操作数据库的方法。JDBC,也就是 Java DataBase Connectivity (Java 数据库连接),其实是由Java语言编写的一堆接口和一些class类组成的一套工具类的程序。它里面的一堆接口,都是给不同的数据库服务商定义的一套Java连接数据库的一套规则,一套规范。也就是说JDBC并不能给我们直接连接和操作数据库,真正操作数据库的,是各大数据库服务商按照JDBC规范写出来的驱动Jar包,JDBC和驱动包的关系,就是很单纯很清纯的接口与原创 2020-08-27 18:33:21 · 2133 阅读 · 0 评论 -
Spring使用JDBC连接数据库:Failed to configure a DataSource: ‘url,Failed to determine a suitable driver class
Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class今天做实验遇到这个问题。原因就是Spring启动的时候会自动读取properties配置文件里面的DataSource信息,然而我的那些用户名,信原创 2020-08-27 13:49:30 · 470 阅读 · 0 评论 -
MySql索引优化(防止索引失效?从执行计划和执行代价入手,一起看查询优化器会做出怎样的选择)
关于索引的概念和优缺点在:索引的优缺点这里不重复记录这些概念性问题。经常面试问到和用到的索引都有哪些?(1)聚簇索引(聚集索引):一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。(2) 辅助索引(非聚簇索引):原创 2020-08-24 16:44:10 · 408 阅读 · 0 评论 -
MySql的事务(脏读幻读可重复读+玄幻小Demo+MVCC原理底层的简单解析)
面试必背概念:(1) 什么是事务?超简单地说,事务就是多条SQL语句组合(或者单条SQL)去完成的一个业务场景,高深一点的概念叫做逻辑操作单元,也就是说,这么多条SQL(或者单条SQL)都成功执行,才能一个完整的事务执行。(2)什么是事务的ACID?A:atomicity。原子性。那一个SQL操作组合,要是全部执行成功,要么全部不执行,要么全部回滚,不允许一些成功一些不成功。C:consistency。一致性。这是针对数据来说的,在操作数据的时候必须是从一种状态变换到另外一种状态。I : iso原创 2020-07-29 16:54:20 · 418 阅读 · 0 评论 -
MySql存储过程
存储过程,开发中用得相对较少。很传统抽象的解释是:存储过程(Stored Procedure)是在数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数来执行。它给我的感觉就是一个自定义函数,可以in接受入参,out出参,然后中间用begin 和 end一起包裹一些处理的过程,调用它,执行你自己写好的那几条业务SQL语句,返回(或者不返回)参数。优点:(1)简化了复杂的业务逻辑,在持久层调用的时候也可以直接通过Procedure Name +原创 2020-07-07 17:33:35 · 172 阅读 · 0 评论 -
MySql中的触发器
在项目中好少使用缺点显而易见:(1)不够灵活。只能针对update,delete,insert等操作作为触发事件,不符合实际项目开发中根据参数灵活判断进行触发(除非你专门为了一些特定的模块数据去新增专门的update,delete,insert等操作表,但实际开发谁会这样做)。(2)开销大,在begin … end 语句块中要执行的操作如果复杂,很容易就造成一定数据库压力。(3)在新增和删除和更新操作频繁的数据库表,如果通过触发器来做业务逻辑的‘后续处理’,很难维护,而且触发器是针对行的加锁,会造成原创 2020-07-07 15:19:33 · 148 阅读 · 0 评论