数据库常见问题整理

来源:互联网 发布:vscode c 函数插件 编辑:程序博客网 时间:2024/06/07 00:36

1.数据库回滚(rollback)和撤销(undo)的区别

答:回滚:即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,滚回到事务开始时的状态。

撤销:恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改,使得该事务好像根本没有启动一样。

二者主要区别在于事务执行的状态,回滚是在事务未全部完成即在事务中发生的,撤销是在该事务已经执行完成后发生的,不过二者都是为解决事务故障而存在的一种安全机制。

2.数据库事务

答:database transaction,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

原子性:atomic,事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

一致性:consistent,

隔离性:insulation,由并发事务所作的修改必须与其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

持久性:duration,

3.数据库中如何确保添加时某列数据不会重复

为该列添加索引或设置主键。

4.

不要使用count(列名)或count(常量)来替代count(*);count(*)会统计值为null的行,而count(列名)不会统计此列为null值得行。

5.

使用isnull()来判断是否为null值。注意:null与任何值得直接比较都为null。

6.分层领域模型规约

POJO(plain ordinary java object):在本手册中,POJO专指只有setter/getter/toString的简单类。

DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。

DTO(Data Transfer Object):数据传输对象,Service和Manager向外传输的对象。

BO(Business Object):业务对象,可以由Service层输出的封装业务逻辑的对象。

Query:数据查询对象,各层接收上层的查询请求。

VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。

ORM(object relation mapping):对象关系映射。

7.如果明确知道只有一条结果返回,limit 1能够提高效率

select * from user where name = ?
可优化为:

select * from user where name = ? limit 1
原因:你知道只有一条结果,但数据库并不知道,明确告诉它,让它主动停止游标移动

8.把计算放到业务层而不是数据库层,除了节省数据的CPU,还有意想不到的查询缓存优化效果

select * from order where date <= CURDATE()
这不是一个好的SQL实践,应该优化为:

$curDate = date('Y-m-d');$res = mysql_query(    'select * from order where date < = $curDate');
原因:

释放了数据库的CPU;

多次调用,传入的SQL相同,才可以利用查询缓存






0 0
原创粉丝点击