当前位置:首页 » 编程语言 » 加事务会让sql停止吗
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

加事务会让sql停止吗

发布时间: 2022-05-19 22:05:25

Ⅰ 若有事务正在进行,则无法关闭数据库,可以通过快速关闭数据库的方式。

停止oracle server
命令:shutdown [normal|transactional|immediate|abort]

参数说明:
normal:等待用户断开已存在连接,系统发出检查点,然后在同步数据文件、控制文和重做日志文件之后关闭(默认选项)。
transactional:等待客户端结束事务之后,自动断开用户连接,然后再执行normal。
immediate:取消当前所有sql语句,回退所有未完成事务,然后自动断开,再执行normal。
abort:终止所有sql语句,立即终止实例。不会发出检查点,所以也就不会去同步数据文件、控制文件和重做日志文件。

在这里,你可以使用命令:shutdown immediate

Ⅱ 开启了事务,在sql出错的时候不执行commit,也没执行rollback的话,会出现什么情况

有可能出现死锁。
因为在对表做更新操作的时候,就会在表上加锁,事务没提交,锁是不会释放的,这是数据库为了保证数据完整性的操作。那么在某个程序写数据库表的时候,其他任何程序对该表是无法进行读取和写入的,处于等待状态。
如果出现了循环等待,A等B,B等C,C等A那么就出现了死锁。

Ⅲ 使用事务为什么会使sql得到优化

1. 在长时间运行的查询和短查询中使用事务

如果预期有一个长时间运行的查询,并且有大量的数据输出时,开发者就应该在BEGIN TRAN 和END TRAN之间使用事务。

这样事务会在缓冲区缓存为独立事务,并会被分配特定内存,以此来提高处理速度。

2. 不要使用SELECT *

如果使用SELECT * 来选择表中的所有记录,那么一些不必要的记录也被读取、缓存,增加了磁盘的I/O和内存消耗。

3. 避免在WHERE子句中使用显式或隐式函数,比如Convert ()

4. 避免在触发器中执行长时间的操作

5. 适当使用临时表和表变量

当结果集较小的时候,请尽量使用表变量;当结果集相当大时,使用临时表。

6. 使用连接(JOIN)代替子查询(Sub-Queries)

子查询通常作为内联代码来使用,而连接(JOIN)则作为表来使用,这样速度会更快。所以,应尽量避免在连接中使用子查询。

7. 连接条件中表的顺序

在连接条件中,应尽量首先使用较小的表,然后逐步使用较大的表。

8. 循环优化

如果操作在循环内部没有任何影响,那么应尽量将操作放到循环外面,这样可以减少不必要的重复工作。因为,SQL Server优化器不会自动识别这种低效率的代码,更不会自动优化(其他一些语言的编译器可以)。

9. 参数探测

不要在正执行的SP(存储过程)中使用SP参数,这样会导致参数探测(Parameter Sniffing)。应该在声明和设置后再使用SP参数。由于这个原因,SP的行为在每次运行期间都不相同。

10. 当使用条件语句时,可以使用Index(索引)Hint(提示)

比如在SQL Server 2008中,可以使用Index hint,也可以使用fixed plan hint强制在查询中使用hint,以提高运行速度。

Ⅳ 事务在SQL中有什么作用

事务的好处在于,当你需要对多个表进行相关性操作时,使用BeginTrans()开启事务,然后操作,如果中间哪个表更新出错了,或者数据有问题,你可以用RollBack()方法在取消之前的相关性操作,如果没有错,那就使用Commit()方法提交你的修改。另外,在这个过程中,所有你改动的内容只对你自己有效,别人不能知道你改了什么,也不能对你正在改的表做修改,直到你提交之后,别人才能修改这些表,检索出你修改过的内容。

Ⅳ 没有使用事务,SQL会产生锁吗

没有使用事务,SQL会产生锁吗
会。 锁是系统自动加的,根据并发情况、各会话的操作类型、各会话访问的数据范围情况等来决定。 有时候锁还会升级(扩大锁定范围,或者提高锁的级别)。

Ⅵ 在SQL执行事务操作的时候的问题

默认的话是使用完毕后就释放的,当然,如果人为设置了事务的隔离级别,可以参考sql帮助文档的介绍:

语法
SET TRANSACTION ISOLATION LEVEL
{ READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}

参数
READ COMMITTED

指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。

READ UNCOMMITTED

执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。

REPEATABLE READ

锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。

SERIALIZABLE

在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。

注释
一次只能设置这些选项中的一个,而且设置的选项将一直对那个连接保持有效,直到显式更改该选项为止。这是默认行为,除非在语句的 FROM 子句中在表级上指定优化选项。

SET TRANSACTION ISOLATION LEVEL 的设置是在执行或运行时设置,而不是在分析时设置。

Ⅶ sql的事务问题

如果没有猜错,楼主应该是在执行COMMIT TRANSACTION tran3 后,直接在当前的查询界面查看的表里的数据吧?对于当前会话,即使你没有执行COMMIT,所有数据都会在当前的会话里发生变化,你可以不执行COMMIT TRANSACTION tran3,直接查看表里的数据,你会看到即使没有提交任何事物,表里的数据还是发生变化了。如果你再打开一个查询窗口,你会发现直接从testtran 表里select数据是会一直等待的,因为其它会话(也就是开始你执行begin tran那个会话)有事务没有提交,表是锁定的。事务是用来保证多个会话之间不会应为事务不一致而产生脏数据。对同一会话,是看不出效果的。

Ⅷ 关于SQL数据库的事务处理

如果只对一个表操作,可以采用adLockBatchOptimistic模式,即:
rs.open sql语句,连接,adOpenKeyset,adLockBatchOptimistic
更新的时候不需要事务处理,而是:
do while not rs.eof
rs.edit
rs.fields(...).value=...
rs.update
rs.movenext
loop
rs.updatebatch

Ⅸ SQL 查询能使用事务嘛合适嘛

事务,就是要么全部执行,要么全部不执行。

事务开始

插入表A一个字段B (主键 int 标识 自动增)

<-- 假如这里意外发生了,那么 最终 A 表不会多一条数据。

然后查询出 这个表A的 字段B的值

插入附属表E 关联字段C (int )

<-- 假如这里意外发生了,那么 最终 A 表 E 表 不会多数据。

结束事务

<-- 假如这里意外发生了,那么 最终 A 表 E 表,还是有数据的。

==================================================

对于 Oracle 数据库来说:

事务开始
插入表A一个字段B (主键 int 标识 自动增)

-- 这个时候,只有你,能查询到你刚才新增的那条记录。
-- 你新增的,未提交的数据,其他人是看不到的。

然后查询出 这个表A的 字段B的值

插入附属表E 关联字段C (int )

-- 这个时候,未提交, 你新增的 表A与表E的数据,只有你这个会话能看到
-- 别人看不到。

结束事务

-- 事务提交以后,别人
SELECT * FROM A
SELECT * FROM E
能够看到你刚才插入的数据了。

============================
还是Oracle

事务是通过 一种叫 undo 的机制来处理的。

比如
事务开始
插入表A一个字段B (主键 int 标识 自动增)

-- 将数据写入到 表A的存储区域
-- 同时记录 undo 信息, 就是针对你的 INSERT INTO A ... 的SQL
-- undo 的 SQL 是 DELETE FROM A WHERE B=...

然后查询出 这个表A的 字段B的值

插入附属表E 关联字段C (int )

-- 将数据写入到 表E的存储区域
-- 同时记录 undo 信息, 就是针对你的 INSERT INTO E ... 的SQL
-- undo 的 SQL 是 DELETE FROM E WHERE C=...

-- 假如这个时候,服务器重新启动了
-- 那么下次服务器启动的时候,将把没有提交的事务 undo掉
-- 也就是执行前面的
-- DELETE FROM A WHERE B=...
-- DELETE FROM E WHERE C=...

结束事务

-- 这个时候,提交事务了,也就是 Commit 了。
-- 将 SCN ( System Change Number)递增
-- 通过将 SCN 递增,使得 别的用户,可以访问到你新增加的数据。
-- 前面所使用的 undo 空间,将腾出来,给别的用户使用。