group by 用来分组数据, where 用来过滤数据
数据库范式
- 范式是什么
范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。
数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。
一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。
符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。
- 范式的分类
- 1NF:每个关系r的属性值为不可分的原子值,1NF是所有关系型数据库的最基本要求。
- 2NF:满足1NF,非主属性完全函数依赖于候选键(左部不可约)
- 3NF:满足2NF,消除非主属性对候选键的传递依赖
- BCNF:满足3NF,消除每一属性对候选键的传递依赖
数据库系统的特点:
- 数据结构化
- 数据的共享性高,冗余度低,易扩充
- 数据独立性高
- 数据由数据库管理系统DBMS统一管理和控制
数据库管理系统DBMS 提供以下几方面的数据控制功能:
- 数据的安全性保护(security)
- 数据的完整性检查(integrity)
- 数据库的并发访问控制(concurrency)
- 数据库的故障恢复(recovery)
本地管理表空间和字典管理表空间的特点
- 本地管理表空间:
- 以位图的方式,将区的分配信息保存在数据文件本身,所有区的分配等操作都只是位图的运算,位图中的每一位对应数据文件中的一个区或几个连续的区。
- 生成的重做日志将非常少
- 运行的效率很高
- 产生磁盘碎片很少
- 如果要用本地管理表空间,可以在创建表空间时,使用: EXTENT MANAGEMENT LOCAL 选项。
- 字典管理表空间:
- 将Oracle的区管理信息存放在表空间的字典中进行管理,所有区的分配与释放,都会使字典的记录的增减变动。
- 在字典的记录中会执行更新、插入、删 除操作,在执行上述操作时,都会生成重做日志
- 对字典的管理,将影响正常操作的效率
- 在区分配、回收的过程中,产生磁盘碎片,如果磁盘碎片增加到一定 的程度,会浪费空间,严重影响效率
- Oracle 在管理表空间的管理中,会产生递归SQL。
- 如果要用字典的方式管理表空间,可以在创建表空间时,使用: EXTENT MANAGEMENT DICTIONARY 选项。
显然,本地管理表空间这种方式更优。
JDBC PreparedStatement 缺点及解决办法:
- 缺点
不能直接用它来执行in条件语句
- 解决方案:
- 分别进行单条查询——这样做性能很差,不推荐。
- 使用存储过程——这取决于数据库的实现,不是所有数据库都支持。
- 动态生成PreparedStatement——这是个好办法,但是不能享受PreparedStatement的缓存带来的好处了。
- 在PreparedStatement查询中使用NULL值——如果你知道输入变量的最大个数的话,这是个不错的办法,扩展一下还可以支持无限参数。
MYSQL 日志的分类
- 错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)
- 二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)
- 查询日志:-log (记录建立的客户端连接和执行的语句)
- 慢查询日志: -log-slow-queries (记录所有执行超过long_query_time秒的所有查询)
- 更新日志: -log-update (二进制日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用)
MYSQL主从复制
- 分类
基于日志 bin-log
基于全局事务标识符 GTID
- 原理
- master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件,binary log events)
- slave将master的binary log events拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)
网友评论