Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 事务外选择的隔离级别_Database_Relational Database - Fatal编程技术网

Database 事务外选择的隔离级别

Database 事务外选择的隔离级别,database,relational-database,Database,Relational Database,事务外是否会选择仅查看提交的数据 UPD。我的数据库是MySQL UPD。我对没有显式事务的简单SELECT语句感兴趣。它将看到什么数据?如何更改它?如果您有一个特定的数据库,我们可能会告诉您普通安装的默认设置。否则。。。它取决于配置和安装数据库系统的人将其设置为什么,或者之后的其他人将其设置为什么 我假设您询问的是InnoDB,因为MyISAM不支持事务 没有事务外这样的事情,即使使用默认的autocommit=1,每个语句本身都是一个事务 SET SESSION TRANSACTION IS

事务外是否会选择仅查看提交的数据

UPD。我的数据库是MySQL


UPD。我对没有显式事务的简单SELECT语句感兴趣。它将看到什么数据?如何更改它?

如果您有一个特定的数据库,我们可能会告诉您普通安装的默认设置。否则。。。它取决于配置和安装数据库系统的人将其设置为什么,或者之后的其他人将其设置为什么

我假设您询问的是InnoDB,因为MyISAM不支持事务

没有事务外这样的事情,即使使用默认的
autocommit=1
,每个语句本身都是一个事务

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
您的问题的答案取决于您所说的“仅提交数据”的含义

假设我们有一个带行的表:

INSERT table (id, Counter, LastUpdates) VALUES (8, 100, '2011-03-08 22:04:00');
会话A修改行时:

START TRANSACTION;
UPDATE table SET Count = 101, LastUpdates = NOW() WHERE id = 8;
SLEEP(100);
COMMIT;
如果会话B在会话a提交事务之前发出select,将发生什么取决于会话B的事务隔离级别

  • 读取未提交的
    :会话B将读取新修改的行(计数器=101)
  • 读取提交的
    /
    可重复读取(默认)
    :会话B将看到最新提交的行(计数器=100)
  • SERIALIZABLE
    :会话B将阻塞,直到会话A提交
下面是一个用户如何在不声明事务的情况下更改会话事务级别

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

这取决于语句、会话或数据库隔离级别设置(或默认设置)为什么。如果没有更多详细信息,就无法回答您的问题。这是一个肯定/否定的问题吗?(答案是否定的,例如,在Sql Server中,您可以使用(NOLOCK)运行
选择。您的问题是关于默认行为的吗?请提供更多详细信息。Read-Read-UNCOMMITTED实际上会在提交脏行之前返回脏行(counter=101),这就是为什么它被称为“Read-UNCOMMITTED”@CharonME你说得对。我已经更新了答案以反映。