sql与mysql相关知识点

1.还有关于索引的问题

1.不管是mysql数据库还是DM数据库,索引在一个数据库当中都不能重复 

2.建表语句和创建索引语句之间的转换

建表语句

UNIQUE INDEX `interfacePK`(`itfId`)

创建索引语句

pf1013_uk_1代表索引名

on 对于哪个表得哪个字段

CREATE UNIQUE INDEX pf1013_uk_1 ON pf1013 ( errorRecordId );

代表两个字段一起组成唯一索引

UNIQUE INDEX `channelPK`(`channelCode`, `channelName`) 

2.mysql plus

突然被问到mysql plus 第一反应不是iphone plus么

官网链接:Mybatis-Plus

然后  大致了解他是一个mysql主从集群,默认两从,最多六从,特点是方便

3.in和instr的区别

(下述的in方法不建议使用,因为$会造成sql注入,可以改为collection)

和instr比  in可以走索引

ex:

此时不走tagName索引

SELECT tagId from pf1009 where instr("x1,x2,x3",tagName)>0

此时走tagName索引

SELECT tagId from pf1009 where tagName in ("x1","x2","x3")

instr 母串在前 子串在后 

前端传入mybatis实现方式

1.分割成字符串

 //由"x1,x3"变成"x1","x3"
  StringBuilder builder = new StringBuilder();
  for(String tag:tags){
     builder.append("'"+tag+"',");
   }
   //去掉最后一个逗号,
   String substring = builder.substring(0, builder.length() - 1);
   params.setTagName(substring);

2.$接收

SELECT tagId from pf1009 where tagName in (${tagName}) 

3.注意,不是每种数据库都有instr函数的,所以他虽然速度快但是用途没有like广泛,就是你切换数据库的时候可能还要改sql,比如postgre就没有这个函数

4.主键还用建索引吗?

不用,主键已经是唯一索引

当你创建或设置主键的时候,mysql会自动添加一个与主键对应的唯一索引,不需要再做额外的添加

5.解决查询慢问题,关联表也要建立索引

起因:我把主表的几个查询字段已经建立了索引,但是速度没有快多少

解决办法:把left join 表的检索字段也加上索引,速度明显快很多

SELECT OA0501.*from OA0501 
LEFT JOIN OA0507 ON OA0501.ID = OA0507.OA0501Id
where OA0501.OA0201Id=#{cityId}

6.数据库中建外键不能重名

mysql加外键报错 ERROR 1826: Duplicate foreign key constraint name 'idXXXX'

因为已经存在一个同样名称的外键了

7.因版本问题导致int和long类型转换报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值