1.什么时候用到事务,单个update操作会用到事务吗?

银行转账

/**//*--使用事务--*/
use stuDB
go
--恢复原来的数据
--update bank set currentMoney=currentMoney-1000 where customerName='李'
set nocount on --不显示受影响的行数
print '查看转帐事务前的余额'
select * from bank
go /**//*--开始事务--*/
begin transaction
declare @errorSum int --定义变量,用于累计事务执行过程中的错误
/**//*--转帐--*/
update bank set currentMoney=currentMoney-800 where customerName='张三'
set @errorSum=@errorSum+@@error --累计是否有错误
update bank set currentMoney=currentMoney+800 where customerName='李四'
set @errorSum=@errorSum+@@error --累计是否有错误 print '查看转帐事务过程中的余额'
select * from bank /**//*--根据是否有错误,确定事务是提交还是回滚--*/
if @errorSum>0
begin
print '交易失败,回滚事务.'
rollback transaction
end
else
begin
print '交易成功,提交事务,写入硬盘,永久保存!'
commit transaction
end
go print '查看转帐后的余额'
select * from bank
go
SqlTransaction Tran=null;
using(SqlConnection conn=new……)
{
try
{
conn.Open();
SqlCommand comm = conn.CreateCommand();
Tran = conn.BeginTransaction("SpecifyTran");
//操作table1
//操作tble2
//…… Tran.Commit();
}
catch
{
//……
}
}

可以使得你这一系列的对数据的操作要么全成功,要么就是全失败,其中一个操作失败就全失败

1
throw new ........

这样的代码,这就会造成回滚。但是如果你的业务逻辑就有”放弃“的流程,那么你就没有必要用什么 throw 了,直接应该写 rollback了。

单个update操作数据库会自动添加事务。

2.服务器端开发经验

3.数据库隔离级别:

为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔离级别,(ORACLE和SQLSERER对标准隔离级别有不同的实现 )

  • 未提交读(Read Uncommitted)

直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别的事务可以读到这个改变,这是很不安全的。

  允许任务读取数据库中未提交的数据更改,也称为脏读。

  • 提交读(Read Committed)

直译就是"读提交",可防止脏读,意思就是语句提交以后即执行了COMMIT以后别的事务就能读到这个改变。

只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别

  • 可重复读(Repeatable Read):

直译就是"可以重复读",这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的。

在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读

  • 串行读(Serializable)

直译就是"序列化",意思是说这个事务执行的时候不允许别的事务并发执行。完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

注意:以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。像Serializable这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况。

4.EF的特性

持久层,相当于ORM映射。增删该查可以自动实现。

http://www.cnblogs.com/xuf22/articles/5513283.html

http://www.360doc.com/content/13/0702/09/10504424_297050223.shtml

5.where什么情况下不用索引

http://www.cnblogs.com/AK2012/archive/2013/01/04/2844283.html

6.ajax为什么会局部页面刷新

首先局部刷新,是网页的一个小模块,一个div内部或者table内部。

其次,刷新就需要数据,而ajax的意义就在于不用刷新整个页面就能请求数据。

用ajax实现局部刷新最终是JS的DOM操作实现,Ajax只是异步到服务器获取数据。

Web 应用程序都使用请求/响应模型从服务器上获得完整的 HTML 页面。

常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,这样一个反复的过程。

有了 Ajax 和 XMLHttpRequest 对象,就可以不必让用户等待服务器响应的请求/响应模型了,针对局部请求做出响应。

http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html

7.下拉框级联实现

8.下拉框显示数据过多,怎么优化显示方式

下拉选择框 左右移动 左右添加

http://www.cnblogs.com/chrisghb8812/p/5623635.html

9.bootstrap控件 datagrid。。。

10.遇到的技术难题,如何克服

11.left join where在on后面和在最后的区别

SQL中,有几个表通过Left Join连接,如果要写一些过滤条件,写在ON后面和写在WHERE后面有什么不同??
例如:

SELECT 部门, sum(生产量)
FROM 部门表 LEFT JOIN 产量表 ON 部门表.ID = 产量表.部门ID
AND (产量表.时间< '2010-12-31')
WHERE 产量表.有效的 = 1
GROUP BY 部门 SELECT 部门, sum(生产量)
FROM 部门表 LEFT JOIN 产量表 ON 部门表.ID = 产量表.部门ID
WHERE (产量表.有效的 = 1) AND (产量表.时间< '2010-12-31')
GROUP BY 部门

第一种查询时会带着这些产量为空的部门。

第二种查询 AND (产量表.时间< '2010-12-31')会把这些部门筛选掉。

这个条件在你这里的情况下,写在 ON 和 WHRER 里是不一样的。

  • 写在 AND 里是先执行后再 WHERE
  • 写在 WHERE 里是后执行,看一下执行计划就一切都明了了,把条件写在 WHERE 里,Left Join 自动变成 INNER JOIN 了,结果当然不一样

12.什么时候用存储过程,什么时候代码中用拼接语句?

存储过程的可移植性差,我们现在是面向数据的开发,所以存储过程用的比较多。

存储过程是预编译的,数据库和应用程序之间是有带宽限制的,存储过程是一次返回数据结果,所以快。

http://www.cnblogs.com/JustYong/p/5359689.html

http://www.cnblogs.com/xdh2571/articles/3571955.html

zhaoyin的更多相关文章

随机推荐

  1. PDF to image

    http://www.verypdf.com/pdf2tif/pdf-to-image/help.htm http://www.softinterface.com/DL/DL_Alternate_Do ...

  2. linux下的文件解压命令

    说一下tar命令的参数含义:z,使用gzip解压,x:extract解压,v:显示详细信息,f:使用归档在当前文件夹. 在解压时出现了解压失败,原因是没有sudo,无法创建文件夹.

  3. MySQL数据库一个字段对应多个值得模糊查询和多个字段对应一个模糊查询

    当一个字段想模糊查询出多个字段的时候,正常情况下一般会这么作 1 select * from a where name like 'a%' or name like 'b%' ....or ...; ...

  4. CentOS 7.4下使用yum安装MySQL5.7.20 最简单的 (引用)

    引用 https://blog.csdn.net/z13615480737/article/details/78906598 CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ...

  5. [No0000133]c# ERROR:“.”(十六进制值 0x00)是无效的字符

    December 24, 2013 c# exception “.”(十六进制值 0x00)是无效的字符. 解决方法:常见于socket方式连接(包括HTTP方式)等.报文交互时候,对方会在字符串后面 ...

  6. hive中创建子表并插入数据过程初始化MR报错解决方法

    本文继成上一篇通过hive分析nginx日志文章,详情参考下面链接: http://www.cnblogs.com/wcwen1990/p/7066230.html 接着来: 创建业务子表: drop ...

  7. rabbitmq集群部署及配置

    消息中间件rabbitmq,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步.本篇将以rabbitmq+HA方式进行部署. 一.原理介绍 rabbitmq是依据erlang的分 ...

  8. RabbitMQ的Q&A

    默认的IP端口 amqp默认绑定IP(本机所有IP),端口:5672 clustering默认绑定IP(本机所有IP),端口:25672 RabbitMQ Management插件 (本机所有IP), ...

  9. 直和 direct sum

    小结: 1.xy平面 与  直和 https://en.wikipedia.org/wiki/Direct_sum For example, the xy-plane, a two-dimension ...

  10. Java 输入/输出——处理流(BufferedStream、PrintStream、转换流、推回输入流)

    关于使用处理流的优势,归纳起来就是两点:(1)对于开发人员来说,使用处理流进行输入/输出操作更简单:(2)使用处理流执行效率更高. 1.BufferedInputStream/BufferedOutp ...