数据库知识点总结(一)

在学习mysql和实际开发应用中,所做的笔记和踩的一些坑,记录一下,如下所示:
  1. 查询为NULL的数据时,不能使用 `= null,应该用is
  2. 关键词in.例如查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息where job in (2,3,4);
  3. 通配符 “_” 代表任意1个字符,通配符 “%” 代表任意个字符(0个 ~ 多个)
  4. 关于group by 和having的用法:分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义,执行顺序where>聚合函数>having
    where和having的区别(面试题):(聚合函数对NULL值不做计算)
    (1)执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
    (2)判断条件不同:where不能对聚合函数进行判断,而having可以。
  5. 关于分页:分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
  6. 多表设计
    (1)一对多:在数据库表中多的一方,添加字段,来关联属于一这方的主键。
    (2)一对一 :在两方中均加入外键,关联另外一方的主键.
    (3)多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主
  7. 外键约束(foreign key):保证了数据的完整性和一致性。关于物理外键和逻辑外键,在现在的企业开发中,很少会使用物理外键,都是使用逻辑外键。 甚至在一些数据库开发规范中,会明确指出禁止使用物理外键 foreign key。
    物理外键:使用foreign key定义外键关联另外一张表。
    缺点:
    (1)影响增、删、改的效率(需要检查外键关系)。
    (2)仅用于单节点数据库,不适用与分布式、集群场景。
    (3)容易引发数据库的死锁问题,消耗性能。
    逻辑外键:在业务层逻辑中,解决外键关联。
    通过逻辑外键,就可以很方便的解决上述问题。
  8. 关于mybatis,Mybatis框架,就是对原始的JDBC程序的封装。
    JDBC: ( Java DataBase Connectivity ),就是使用Java语言操作关系型数据库的一套API。
    分析了JDBC的缺点之后,我们再来看一下在mybatis中,是如何解决这些问题的:
    (1)数据库连接四要素(驱动、链接、用户名、密码),都配置在springboot默认的配置文件 application.properties中
    (2)查询结果的解析及封装,由mybatis自动完成映射封装,我们无需关注
    (3)在mybatis中使用了数据库连接池技术,从而避免了频繁的创建连接、销毁连接而带来的资源浪费。
  9. 参数占位符${…}和#{…}
    在项目开发中,建议使用#{…},生成预编译SQL,防止SQL注入,更加安全。
    SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,已达到执行代码对服务器进行攻击的方法
  10. 主键返回:在数据添加成功后,需要获取插入数据库数据的主键。
    默认情况下,执行插入操作时,是不会主键值返回的。如果我们想要拿到主键值,需要在Mapper接口中的方法上添加一个Options注解,并在注解中指定属性useGeneratedKeys=true和keyProperty=“实体类属性名”
  11. 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。
    如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装
    解决方案:(1)起别名(2)结果映射(3)开启驼峰命名(推荐) 表中字段名:abc_xyz 类中属性名:abcXyz
    (# 在application.properties中添加:mybatis.configuration.map-underscore-to-camel-case=true)
  12. 使用MySQL提供的字符串拼接函数:concat(‘%’ , ‘关键字’ , ‘%’)(解决SQL注入风险),例如:"where name like concat(‘%’,#{name},‘%’) ",也可以选择在service层直接拼接字符串
  13. 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。
  14. MybatisX是一款基于IDEA的快速开发Mybatis的插件,为效率而生。可以在IDEA中得插件plugins中生成。
  15. 动态sql语句
    (1).形式:…
    (2) where元素只在子元素有内容的情况下才会插入where子句,而且会自动去除子句中开头多余的and或者or)
    (3) 动态地在行首插入SET关键字,并会删掉额外地逗号(用在update语句中)
    (4):定义可重用的SQL片段
    (5):通过属性refid,指定包含的SQL片段
    (6)使用遍历deleteByIds方法中传递的参数ids集合

你可能感兴趣的:(数据库,数据库,知识点汇总,数据库开发笔记,mybatis)