摘要:数据库对象命名规范 数据库对象 数据库对象是数据库的组成部分,常见的有以下几种: 表(Table )、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(Stored Procedure)、 用户(User)等 阅读全文
posted @ 2021-07-22 16:21 翁智华 阅读(317) 评论(0) 推荐(2) 编辑
摘要:背景 单位每年都会举行运动会,有一个2000m长跑的项目,大约每年报名人员为男选手40人,女选手20人,只有一条橡胶跑道。一次比赛10人齐跑,所以至少需要6场比赛。 2000米的完成时间要求是20分钟,超过20分钟不计数,所以比赛耗时我们计算为20分钟,加上比赛前的动员组织,比赛后的清场,我们假定每 阅读全文
posted @ 2021-03-11 14:54 翁智华 阅读(738) 评论(0) 推荐(3) 编辑
摘要:回顾一下上面几篇索引相关的文章: MySQL全面瓦解22:索引的介绍和原理分析 MySQL全面瓦解23:MySQL索引实现和使用 MySQL全面瓦解24:构建高性能索引(策略篇) 索引的十大原则 1、正确理解和计算索引字段的区分度,文中有计算规则,区分度高的索引,可以快速得定位数据,区分度太低,无法 阅读全文
posted @ 2021-03-09 14:53 翁智华 阅读(479) 评论(1) 推荐(1) 编辑
摘要:学习如果构建高性能的索引之前,我们先来了解下之前的知识,以下两篇是基础原理,了解之后,对面后续索引构建的原则和优化方法会有更清晰的理解: MySQL全面瓦解22:索引的介绍和原理分析 MySQL全面瓦解23:MySQL索引实现和使用 我们编写索引的目的是什么?就是使我们的sql语句执行得更加高效,更 阅读全文
posted @ 2021-03-08 14:54 翁智华 阅读(424) 评论(1) 推荐(1) 编辑
摘要:MySQL索引实现 上一篇我们详细了解了B+树的实现原理(传送门)。我们知道,MySQL内部索引是由不同的引擎实现的,主要包含InnoDB和MyISAM这两种,并且这两种引擎中的索引都是使用b+树的结构来存储的。 InnoDB引擎中的索引 Innodb中有2种索引:主键索引(也叫聚集索引)、辅助索引 阅读全文
posted @ 2021-02-25 15:07 翁智华 阅读(585) 评论(0) 推荐(1) 编辑
摘要:索引的定义 MySQL官方对索引的定义为:索引(Index)是协助MySQL高效获取数据的数据结构。 本质上,索引的目的是为了提高查询效率,通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。 可 阅读全文
posted @ 2021-02-18 15:15 翁智华 阅读(640) 评论(4) 推荐(3) 编辑
摘要:概述 在C#9.0下,record是一个关键字,微软官方目前暂时将它翻译为记录类型。 传统面向对象的编程的核心思想是一个对象有着唯一标识,封装着随时可变的状态。C#也是一直这样设计和工作的。但是一些时候,你就非常需要刚好对立的方式。原来那种默认的方式往往会成为阻力,使得事情变得费时费力。如果你发现你 阅读全文
posted @ 2021-02-01 15:27 翁智华 阅读(484) 评论(1) 推荐(2) 编辑
摘要:增强的模式匹配 C#9.0添加了几种新的模式。我们可以参阅模式匹配教程 ,来了解下面代码的上下文: 1 public static decimal CalculateToll(object vehicle) => 2 vehicle switch 3 { 4 ... 5 6 DeliveryTruc 阅读全文
posted @ 2021-01-30 18:13 翁智华 阅读(74) 评论(0) 推荐(1) 编辑
摘要:我们称之为顶级层序 用 C# 编写一个简单的程序需要大量的样板代码,引用,类、方法、结构体等: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.WriteLine("Hello World!"); 6 7 } 8 阅读全文
posted @ 2021-01-30 17:58 翁智华 阅读(73) 评论(0) 推荐(0) 编辑
摘要:背景 在以前的C#版本里面,如果需要定义一个不可修改的的类型的做法一般是:声明为readonly,并设置为只包含get访问器,不包含set访问器。如下: 1 public class PersonInfo 2 { 3 /// <summary> 4 /// 身份编号 5 /// </summary> 阅读全文
posted @ 2021-01-30 17:42 翁智华 阅读(404) 评论(0) 推荐(0) 编辑
摘要:背景 1月22号晚上10点半,下班后愉快的坐在在回家的地铁上,心里想着周末的生活怎么安排。 突然电话响了起来,一看是我们的一个开发同学,顿时紧张了起来,本周的版本已经发布过了,这时候打电话一般来说是线上出问题了。 果然,沟通的情况是线上的一个查询数据的接口被疯狂的失去理智般的调用,这个操作直接导致线 阅读全文
posted @ 2021-01-27 16:00 翁智华 阅读(988) 评论(6) 推荐(3) 编辑
摘要:背景 说到流程控制语句,我们在程序语法中用的比较多,比如C#的if..else...,while...,?: 等。同样的,在MySQL中,也有一些流程控制的语法,方便我们在写函数、存储过程的时候对逻辑进行控制和处理。 常见的过程式SQL语句可以用在存储过程或者函数体中。其中包括:IF函数、IF条件语 阅读全文
posted @ 2021-01-22 15:18 翁智华 阅读(319) 评论(0) 推荐(0) 编辑
摘要:定义 我们经常会遇到这样的一种情况,需要对我们查询的结果进行遍历操作,并对遍历到的每一条数据进行处理,这时候就会使用到游标。 所以:游标(Cursor)是处理数据的一种存储在MySQL服务器上的数据库查询方法,为了查看或者处理结果集中的数据,提供了在结果集中一次一行遍历数据的能力。 游标主要用在循环 阅读全文
posted @ 2021-01-21 16:20 翁智华 阅读(249) 评论(0) 推荐(1) 编辑
摘要:定义 我们之前学习了MySQL的内置函数,传送门,非常丰富,满足了我们对数据操作的大部分需求。 但是如果有一些复杂的业务逻辑在数据库层面就可以完成,无需在程序层面完成的时候,这时候就可以写成MySQL自定义函数。 所以,函数是指 一组预编译好的sql语句集合,理解成批处理语句,类似于C# 中的方法, 阅读全文
posted @ 2021-01-20 15:20 翁智华 阅读(321) 评论(0) 推荐(0) 编辑
摘要:关于触发器 现实开发中我们经常会遇到这种情况,比如添加、删除和修改信息的时候需要记录日志,我们就要在完成常规的数据库逻辑操作之后再去写入日志表,这样变成了两步操作,更复杂了。 又比如删除一个人员信息的时候,需要将他的购物记录、收货地址、收藏夹等都删了,这个连续的操作容易出错,一致性和完整性不好保证。 阅读全文
posted @ 2021-01-19 15:10 翁智华 阅读(269) 评论(0) 推荐(1) 编辑
摘要:概述 大多数SQL语句都是针对一个或多个表的单条语句。但并非所有业务都这么简单,经常会有复杂的操作需要多条语句才能完成。 比如用户购买一个商品,要删减库存表,要生成订单数据,要保存支付信息等等,他是一个批量的语句执行行为。 存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可 阅读全文
posted @ 2021-01-18 15:47 翁智华 阅读(431) 评论(0) 推荐(1) 编辑
摘要:概述 很多时候,我们会有一些很复杂的数据库操作,比如整合用户的行为数据,那这些数据可能包含用户的餐饮、生活日用、充值消费、交通出行、通讯物流、交通出行、医疗保健、住房物业、运动健康... 基于此,我们可能要去关联很多的用户行为信息表,写一大堆的合并、统计,以及条件过滤的脚本,来输出最终的二维表,这才 阅读全文
posted @ 2020-12-30 15:28 翁智华 阅读(390) 评论(1) 推荐(0) 编辑
摘要:关于事务 我们在数据库中需要执行一个系列的操作的时候,要保证这个系列执行的连续性和完整性,要么整个系列的执行都成功,要么就全部失败(只要有一个步骤失败,其他均回滚到之前的状态), 保证不会存在一部分成功一部分失败的情况。这就是我们事务的职责。下面举个分苹果的例子: A同学有3个苹果,B同学有2个苹果 阅读全文
posted @ 2020-12-16 21:50 翁智华 阅读(520) 评论(1) 推荐(1) 编辑
摘要:概述 提到MySQL的系统函数,我们前面有使用过聚合函数,其实只是其中一小部分。MySQL提供很多功能强大、方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,并更加灵活地满足不同用户的需求。 本文将MySQL的函数分类并汇总,以便提供后面使用中的参考。 MySQL 数值类型函数 阅读全文
posted @ 2020-11-28 15:27 翁智华 阅读(302) 评论(0) 推荐(1) 编辑
摘要:概述 MySQL最强大的功能之一就是能在数据检索的执行中连接(join)表。大部分的单表数据查询并不能满足我们的需求,这时候我们就需要连接一个或者多个表,并通过一些条件过滤筛选出我们需要的数据。 了解MySQL连接查询之前我们先来理解下笛卡尔积的原理。 数据准备 依旧使用上节的表数据(包含class 阅读全文
posted @ 2020-11-19 15:29 翁智华 阅读(414) 评论(0) 推荐(0) 编辑
摘要:数据库对象命名规范 数据库对象 数据库对象是数据库的组成部分,常见的有以下几种: 表(Table )、索引(Index)、视图(View)、图表(Diagram)、缺省值(Default)、规则(Rule)、触发器(Trigger)、存储过程(Stored Procedure)、 用户(User)等 阅读全文
posted @ 2021-07-22 16:21 翁智华 阅读(317) 评论(0) 推荐(2) 编辑
摘要:背景 单位每年都会举行运动会,有一个2000m长跑的项目,大约每年报名人员为男选手40人,女选手20人,只有一条橡胶跑道。一次比赛10人齐跑,所以至少需要6场比赛。 2000米的完成时间要求是20分钟,超过20分钟不计数,所以比赛耗时我们计算为20分钟,加上比赛前的动员组织,比赛后的清场,我们假定每 阅读全文
posted @ 2021-03-11 14:54 翁智华 阅读(738) 评论(0) 推荐(3) 编辑
摘要:回顾一下上面几篇索引相关的文章: MySQL全面瓦解22:索引的介绍和原理分析 MySQL全面瓦解23:MySQL索引实现和使用 MySQL全面瓦解24:构建高性能索引(策略篇) 索引的十大原则 1、正确理解和计算索引字段的区分度,文中有计算规则,区分度高的索引,可以快速得定位数据,区分度太低,无法 阅读全文
posted @ 2021-03-09 14:53 翁智华 阅读(479) 评论(1) 推荐(1) 编辑
摘要:学习如果构建高性能的索引之前,我们先来了解下之前的知识,以下两篇是基础原理,了解之后,对面后续索引构建的原则和优化方法会有更清晰的理解: MySQL全面瓦解22:索引的介绍和原理分析 MySQL全面瓦解23:MySQL索引实现和使用 我们编写索引的目的是什么?就是使我们的sql语句执行得更加高效,更 阅读全文
posted @ 2021-03-08 14:54 翁智华 阅读(424) 评论(1) 推荐(1) 编辑
摘要:MySQL索引实现 上一篇我们详细了解了B+树的实现原理(传送门)。我们知道,MySQL内部索引是由不同的引擎实现的,主要包含InnoDB和MyISAM这两种,并且这两种引擎中的索引都是使用b+树的结构来存储的。 InnoDB引擎中的索引 Innodb中有2种索引:主键索引(也叫聚集索引)、辅助索引 阅读全文
posted @ 2021-02-25 15:07 翁智华 阅读(585) 评论(0) 推荐(1) 编辑
摘要:索引的定义 MySQL官方对索引的定义为:索引(Index)是协助MySQL高效获取数据的数据结构。 本质上,索引的目的是为了提高查询效率,通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。 可 阅读全文
posted @ 2021-02-18 15:15 翁智华 阅读(640) 评论(4) 推荐(3) 编辑
摘要:概述 在C#9.0下,record是一个关键字,微软官方目前暂时将它翻译为记录类型。 传统面向对象的编程的核心思想是一个对象有着唯一标识,封装着随时可变的状态。C#也是一直这样设计和工作的。但是一些时候,你就非常需要刚好对立的方式。原来那种默认的方式往往会成为阻力,使得事情变得费时费力。如果你发现你 阅读全文
posted @ 2021-02-01 15:27 翁智华 阅读(484) 评论(1) 推荐(2) 编辑
摘要:增强的模式匹配 C#9.0添加了几种新的模式。我们可以参阅模式匹配教程 ,来了解下面代码的上下文: 1 public static decimal CalculateToll(object vehicle) => 2 vehicle switch 3 { 4 ... 5 6 DeliveryTruc 阅读全文
posted @ 2021-01-30 18:13 翁智华 阅读(74) 评论(0) 推荐(1) 编辑
摘要:我们称之为顶级层序 用 C# 编写一个简单的程序需要大量的样板代码,引用,类、方法、结构体等: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.WriteLine("Hello World!"); 6 7 } 8 阅读全文
posted @ 2021-01-30 17:58 翁智华 阅读(73) 评论(0) 推荐(0) 编辑
摘要:背景 在以前的C#版本里面,如果需要定义一个不可修改的的类型的做法一般是:声明为readonly,并设置为只包含get访问器,不包含set访问器。如下: 1 public class PersonInfo 2 { 3 /// <summary> 4 /// 身份编号 5 /// </summary> 阅读全文
posted @ 2021-01-30 17:42 翁智华 阅读(404) 评论(0) 推荐(0) 编辑