如果字段值可能为空,那么从表里面读取数据的时候程序使用的变量类型应该使用 sql.NullXXX 类型,比如下面的日期类型: var id uint var createAt time.Time var...recipe.UpdateAt = &updateAt if deleteAt.Valid { recipe.DeleteAt = &deleteAt.Time } recipe.Name = &name 这样如果数据库字段值为空的话...,判断下结构体字段 DeleteAt是否为空,写不同的插入代码即可,如下示例: if do.DeleteAt !...PS: GO语言程序查询数据处理空值的方式还是比较简陋的,容易掉坑里面去。要避免这个问题,最简单的办法还是在建表的时候,给所有字段都设置默认值。...彩蛋: 上面示例中 RecipeDO 结构体的Content字段是一个复杂结构,数据库对应的表的Content字段是一个json类型,这个字段插入数据库之前必须先Json序列化,补上序列化它们的代码:
检查数据库和迁移文件时发现Address这个字段被意外设置成nullable: false,而其它的字段却正常,按理来说对于string类型的属性,EFCore在codefirst模式下应该映射为可空类型...通过查看EF文档了解到,可为空引用类型通过以下方式影响 EF Core 的行为: 如果禁用可为空引用类型,则按约定将具有 .NET 引用类型的所有属性配置为可选 (例如 string ) 。...如果启用了可为 null 的引用类型,则基于属性的 .NET 类型的 C# 为 Null 性来配置属性:string? 将配置为可选属性,但 string 将配置为必需属性。...换而言之,启用了该功能后,把原本《引用类型可为空》的这个传统约定,更改称为了《引用类型是否可为空,是通过?语法来表明的》,实体中string类型的属性在C#中作为引用类型,自然而然地受到了这个影响。...的语法将不起作用 解决 关闭此功能,重新生成迁移,更新数据库,问题解决。
我们看到上表中有一个C#数值类型 decimal 对应的数据库数值类型是 decimal(18,2) ,括号中的2代表小数点后保留2位,但是在一些情况下我们需要保留小数点后面N位,这时我们可以这么做...字段不可为空 //设置Name属性在数据库映射不可为空 modelBuilder.Entity().Property(p=>p.Name).IsRequired(); 字段可为空 //设置Birthday...属性在数据库映射可为空 modelBuilder.Entity().Property(p=>p.Birthday).IsOptional(); 四、日期映射 EF中的日期类型在数据库中默认映射为...Property(p=>p.CreateDateTime).HasColumnType("DATETIME"); 注:数值类型和日期类型属于值类型,因此我们不需要通过 IsRequired 来配置映射字段不可为空...但是可以通过 IsOptional 设置可为空。
我们看到上表中有一个C#数值类型 decimal 对应的数据库数值类型是 decimal(18,2) ,括号中的2代表小数点后保留2位,但是在一些情况下我们需要保留小数点后面N位,这时我们可以这么做...1.字段不可为空 //设置Name属性在数据库映射不可为空modelBuilder.Entity().Property(p=>p.Name).IsRequired(); 2.字段可为空 //...设置Birthday属性在数据库映射可为空modelBuilder.Entity().Property(p=>p.Birthday).IsOptional(); 四、日期映射 EF中的日期类型在数据库中默认映射为...Property(p=>p.CreateDateTime).HasColumnType("DATETIME"); 注:数值类型和日期类型属于值类型,因此我们不需要通过 IsRequired 来配置映射字段不可为空...但是可以通过 IsOptional 设置可为空。
3、EF Core是 模型驱动 (Model-Driven)的开发思想,Dapper是 数据库驱动(DataBase-Driven)的开发思想的。没有优劣,只有比较。...4、性能: Dapper等≠性能高;EF Core≠性能差。 5、EF Core是官方推荐、推进的框架,尽量屏蔽底层数据库差异,.NET开发者必须熟悉,根据的项目情况再决定用哪个。...修改表结构 想要限制Title的最大长度为50,Title字段设置为“不可为空”,并且想增加一个不可为空且最大长度为20的AuthorName(作者名字)属性。...MYSQL方案:select * from T_Houses where Id=1 for update 如果有其他的查询操作也使用for update来查询Id=1的这条数据的话,那些查询就会被挂起...总结:如果有一个确定的字段要被进行并发控制,那么使用IsConcurrencyToken()把这个字段设置为并发令牌即可;如果无法确定一个唯一的并发令牌列,那么就可以引入一个额外的属性设置为并发令牌,并且在每次更新数据的时候
= 等负向条件查询在有 NULL 值的情况下返回非空行的结果集 3.2:使用 concat 函数拼接时,首先要对各个字段进行非 NULL 判断,否则只要任何一个字段为空都会造成拼接的结果为 NULL...当可为NULL的列被索引时,每个索引记录需要一个额外的字节,如果计划在列上建索引,应该避免将列设计为NULL。...;普通索引名idx_字段名;临时表则以tmp为前缀 10.小数类型为decimal,禁止使用float和double 说明:float和double的存储的时候,存在精度损失的问题,很可能在值的比较时...如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储 11.字段允许适当冗余,以提高查询性能,冗余字段应遵循:1)不是频繁修改的字段。...次方 二:增删改查好习惯 1.SELECT语句指定具体字段名称,禁止写成*,select *会将不该读的数据也从MySQL里读出来,造成不必要的带宽压力 2.分页查询,当limit起点较高时,可先用过滤条件进行过滤
在服务能力提升的同时,复杂的网络结构也使问题定位更加困难。在一个请求在经过诸多服务过程中,出现了某一个调用失败的情况,查询具体的异常由哪一个服务引起的就变得十分抓狂,问题定位和处理效率是也会非常低。...同时链路的查询也十分方便,即取表中的一行。 ? Zipkin Zipkin是dapper的一种开源实现,也是业界做链路追踪系统的一个重要参考,其系统也可以即插即用。...Span trace_id为16位或32位的hex字符串, id、 parent_id为16位hex字符串, 如果没有父span, parent_id为空。...Zipkin的采样字段Sampled有四种状态 Defer/Deny/Accept/Debug,采样的一个重要前提是下游要尊重上游的采样决定,不能随意更改sampled字段。...Root_span的sampled字段由系统的采样率来决定。如采样率为50%,则一半的带内数据中sampled字段为accept,其他为deny。
例如调用打款接口,参数打款金额不可为空。...同时,积分充值本质为给用户充值钱款,积分数量会转化 为金额且向下请求支付中心进行资金流转,而资金流转功能限制金额不可为空。 除此之外,需注意对功能的严格定义,有些参数不可非空校验且需兼容为空。...直接举例,查询支付方式接口,金额字段不是必传字段,当接口内部对金额处理就需兼容为空情况,当金额参数传空时,调用此不可报错。 如何进行具体测试? 明确哪些参数为必传,哪些为非必传。...依次对 必传参数设置为空进行请求,此时接口不可调用成功,无数据生成,同时关注接口返回信息明确性,如果接口返回提示文案为“XX不可为空”一目了然,极大方便定位问题,提高效率。...例如必须为整数情况不可传入小数,又如积分充值接口需对积分充值数量限制为汇率的整数倍,如果不进行此校验,当执行到钱款流转时,会出现比1分还小的值,导致无法进行。
前几天偶然看到了dapper,由于以前没有用过,只用过ef core,稍微看了一下,然后写了一些简单的可复用的封装。 Dapper的用法比较接近ADO.NET所以性能也是比较快。...封装 } } } ◆ 三、Dapper的二次封装(基于上一个) 利用反射对Dapper进行二次封装:DapperSuperHelper.cs,通过继承继承dapper的封装,我们可以即可用使用原始封装又可以使用通用的对单表的增删改查...该封装可以实现对单个表的增删改查,以及分页查询,修改、删除、查询都是基于id查询,id支持任意类型。...注意:修改的时候建议先查出数据再执行修改,因为目前封装的代码无法实现只更改某个字段,暂时是全部更改,必填项必须有值。非必填,不传值,即为null。...,需要传递必填的参数,否则报错,未传的参数修改为空,因此最好是先查出当实体,再修改单独字段 var updEntity = new Student() {
习惯了EF后再来使用Dapper,会很难适应那种没有了强类型的安全感。不过可以用单元测和心细来避免。...【组合字段不能为空,否则为空 不做唯一,有重复空数据】) insert into test_tbl (id,dr) values (1,'2'),(2,'3'),......那么在Dapper里面是不是也能简便操作,答案是肯定的。这就得庆幸C#牛逼的语法了。...Note:Dapper不会因为传多了参数而报错,所以放心使用If。 工作单元 使用EF的时候很方便做事务处理,而在Dapper中貌似就没那么优雅了。...SQL监控 使用EF的同学应该很多人都知道MiniProfiler,我在前些年分享EF的时候有做过简单介绍。 那么我们在执行Dapper的时候是不是也可以对生成的sql做检测和性能监控。
int(m)里的m是表示SELECT查询结果集中的显示宽度,无实际意义,不影响实际的取值范围 2、浮点型 MySQL数据类型 含义 float(m,d) 单精度浮点型8位精度(4字节)m总个数,d小数位...double(m,d) 双精度浮点型16位精度(8字节)m总个数,d小数位 decimal(m,d) 定点数总个数m小数位 设一个字段定义为float(5,2),如果插入一个数123.45678...varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。...timestamp,其他字段内容修改的时候,这个字段里的时间数据会自动刷新为当前时间,所以这个数据类型的字段可以存放这条记录最后被修改的时间。...[字段名] 数据类型为[字符串] (字符长度小于6) ,插入数据时 [不能为空] MySQL关键字 含义 NULL 数据列可包含NULL值 NOT NULL 数据列不允许包含NULL值 DEFAULT
(不区分大小写)则查询不出数据,如果使用EF则可以通过Column特性 建立属性和数据表字段之间的映射关系,Dapper则不行 */ //[Column("Name")]...有上图我们可以看到,因为School类中的Title属性在数据库中没有与之对应的字段,所以Title的值为null。查询结果见下图: ?...查询结果映射到匿名类型 在上面的查询中,我们将查询结果映射到了自定义的类型上。除了将查询结果映射到强类型之外,Dapper中还提供了匿名查询方式。...//Dapper读取查询结果数据的顺序必须要和查询语句中的查询顺序一致,否则可能读取不到数据 var schoolList = multipleReader.Read();...Dapper在执行查询语句时会缓存SQL语句的相关信息,这样就保证了Dapper拥有较高的性能(原文:Dapper caches information about every query it runs
如果需要后续变更,那么就需要在创建自定义EF Core 上下文类的时候,为之添加一个连接字符串的属性或者字段,以方便初始化的时候指定。...而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端的外键是可空类型的,并不会删除导航属性另一端的元素只会设置外键指向为NULL,如果另一端外键是不可空的,那么就会同时删除。...如果需要修改,可以使用以下方法修改,在配置导航属性的时候: OnDelete(DeleteBehavior.Cascade); 对于可为NULL的外键来说,枚举DeleteBehavior的值起以下作用...3.花样查询 EF Core 支持Linq查询,所以在查询的时候可以使用Linq进行。...待EF Core篇完成后,将带领一起去探索 Nhibernate和Dapper,SqlSugar这三个ORM框架。
比较: 1对于主健/unique constraint , oracle/sql server/mysql等都会自动建立唯一索引; 2主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的...; 3主健可作外健,唯一索引不可; 4主健不可为空,唯一索引可; 5主健也可是多个字段的组合; 6主键与唯一索引不同的是: (1).有not null属性; (2).每个表只能有一个。...索引的注意事项 1.组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段) 2.索引键的大小不能超过900个字节,...在平台现有下拉参照的查询sql语句中的like条件语句要改成不带前置通配符。...频繁操作的小数量表不建议建立索引(记录数不大于5000条)
image.png 良好的逻辑设计和物理设计是高性能的基石, 应该根据系统将要执行的查询语句来设计schema, 这往往需要权衡各种因素。...尽量避免NULL 如果查询中包含可为NULL 的列, 对MySQL来说更难优化, 因为可为NULL 的列使得索引、 索引统计和值比较都更复杂。...可为NULL的列会使用更多的存储空间, 在MySQL里也需要特殊处理。...DECIMAL类型用于存储精确的小数。 浮点和DECIMAL类型都可以指定精度。 对于DECIMAL列, 可以指定小数点前后所允许的最大位数。这会影响列的空间消耗。...可避免表关联查询。
显示长度只表示数据可以达到指定的长度,但不会自动满足到指定长度。如果想要数据的显示保持最高位(显示长度),需要给字段增加 zerofill 属性。...此时导致的系统自动进位系统可以承担 double(M,D) 双精度(精确到小数点后15位) M代表长度,D代表小数位数 2.2 定点数 定点数能够保证数据精度,整数部分一定精确,小数部分可能不精确(超出长度会四舍五入...00 timestamp 时间戳表示从格林威治时间开始,但格式依然为"YYYY-mm-dd HH:ii:ss" year 年类型 1个字节 1900~2155 注意点: timestamp 不能为空,...'20'+year : '19'+year ) time 本质是用来表示时间区间(xxx个小时),所以可表示范围较大 -838:59:59~838:59:59 time 录入时可使用一个简单的日期(可为负数...如果数据本身小于127个字符:额外开销一个字节,如果大于127个,开销两个字节 char的数据查询效率比varchar高 char 和 varchar 数据存储对比 (utf8字符占用3字节) 存储数据
当然也可以结合MySql.Data和Dapper库一起使用,目前Dapper的最新版本为:2.1.35。...Dapper是一款轻量级ORM工具,是一个简单的.NET对象映射器,在速度上几乎与使用原始ADO.NET数据读取器的速度一样快。ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。...Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询数据库,提供了一种简单、高效的方式来执行数据库查询、插入、更新和删除操作。...数据库,并查询MySql数据库中对应的people表,然后在窗体程序中输入字段LastName来查询对应的数据,鼠标按下search按钮,在ListBox中展示从MySQL数据库中的查询结果;另外我们在下方的三个输入框中分别输入用户的...最终的程序界面如下图所示: (1)、根据LastName查询记录 我们首先在输入框中输入LastName如蒋(英文中LastName代表中文中的姓,FirstName代表中文中的名),然后鼠标点击
() — 允许数据跨行,通常用于 SOA 记录 * — 仅用于 name 字段的通配符 name 字段 name 字段说明资源记录引用的对象名,可以是一台单独的主机也可以是个域名。...ttl 字段 ttl(time to live) 字段是一个寿命字段。它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。通常省略该字段,而使用位于文件开始处的 $TTL 语句所指定值。...class 字段 class 字段用于指定网络类型,可选的值有:IN、CH 和 HS,其中 IN (Internet)是广泛使用的一种。虽然 IN 是该字段的默认值,但通常我们会显示地指出。...type 字段 type 字段用于说明 RR 的类型。常用的 RR 类型如下: ?...关于RR 的书写顺序 SOA RR 应该放在最前面 通常 NS RR 紧跟在 SOA RR 之后 其他记录的顺序无关紧要 data 字段 data 字段的内容取决于 RR 的类型字段。
索引类型,支持PRIMARY, UNIQUE, INDEX, FULLTEXT length 长度 precision 精密度、精确(精度),表示该字段的有效数字位数 scale 刻度、数值范围,表示该字段的小数位数...nullable 是否可为空 unsigned 是否无符号 insertable 是否可插入 queryable 是否可查询 systemable 是否系统字段 updatable 是否可修改 createdDate...联合索引 如果索引只有一个字段,在设置列属性的时候直接设置。如果是多个字段联合索引,就需要单独设置了。这里可以创建普通或唯一两种类型的联合索引,通过下拉框选择多个字段。...附件 附件类型字段支持保存附件,主要是文档、图片等 [url] 设置文件file表的url链接字段属性为ATTACHMENT [file] 录入数据时候,附件字段可以上传文件,如果是图片可以预览。.../swagger-ui.html [api] Postman查询customer表单元数据。
,Float数据类型的二进制精度,对其他数据类型则为NULL DATA_SCALE 小数点右边位数 NULLABLE ...列是否可为空,如果列有非空约束或该列为关键字一部分则该值为N COLUMN_ID 列创建序列号 DEFAULT_LENGTH ... 列默认值 NUM_DISTINCT LOW_VALUE 本字段和下一字段为...:对三行以上的表,该列的第二小或第二大的值,对三行或少于三行的表,即为最小和最大值。...该统计值为前32字节的16进制表示法 HIGH_VALUE 同上一字段 DENSITY
领取专属 10元无门槛券
手把手带您无忧上云