mysql

数据库名、表名、字段名都小写,名字越短越好,务必精炼

字段名字如有多个词组就用下划线分割,表名和数据库不建议有分隔符号

单库不超过300个表

单表字段数不超过50个字段以上

不允许用mysql保留字作为字段名

能用tinyint就不要用smallint,能用smallint就不要用int,能用int就不要用bigint

如需存储用户ip,则用int型存储,不要用char

优先使用enum或set

每个表和字段都加上comment

mysql引擎使用 innodb

不要使用text或blob数据类型

不允许null字段,只允许not null

不允许外键

不允许在mysql里做任何计算

字符字段必须建立前缀索引

所有sql必须有索引

根据合适的查询条件建立合适的索引,查询条件顺序必须和索引顺序一一对应

sql语句不允许出现like

不允许关联查询

保持事务短小,与事务无关操作放到事务外面

不允许使用存储过程和触发器

不使用select *,尽量使用具体字段

不使用or,要用in,注意in的数量,不超过100个

不使用负向查询,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、 NOT LIKE

前台应用不允许使用表关联

时间类字段使用bigint存储到毫秒

数据库只使用insert,update,select权限,删除用is_valid=0代替,特殊业务授于delete权限

 

一些注意点:

  一、重复Insert问题

 

    1、先使用redies.setnx(String key, int expireSecond, String value)方法来防止并发操作,该方法的返回值=1(long类型),表示没有并发,如果返回值=0,表示已有操作在进行,可直接抛出业务异常(BizValidateException或BizException均可)。

    2、步骤1验证通过后,先查询DB中是否存在该数据,存在时直接返回业务异常,不存在时才进行insert操作(该步骤目的是防止dubbo处理超时客户端再次提交导致的重复Insert)。

    注:可以配合唯一索引一起使用。

  二、update或delete操作结束后缓存和DB中数据不一致的几种解决方案:

    1、尽可能不使用事务。

编码:

建数据库表的时候请指定下编码为utf8mb4。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值