首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SELECT语句在INSERT commit transaction之后不会第一次返回row

是因为在数据库事务中,INSERT语句在执行时会将数据写入到数据库的临时存储区域,而不是立即写入到磁盘上的数据文件中。这样可以提高数据库的性能和并发处理能力。

当执行INSERT commit transaction之后,数据库会将临时存储区域中的数据写入到磁盘上的数据文件中,并释放相关的资源。而SELECT语句是从磁盘上的数据文件中读取数据,所以在INSERT commit transaction之后执行SELECT语句时,才能获取到最新的数据。

在实际应用中,这种行为可以确保事务的一致性和隔离性。如果SELECT语句在INSERT commit transaction之前就返回了数据,可能会导致读取到未提交的数据,从而破坏了事务的隔离性。

对于这个问题,腾讯云提供了一系列的数据库产品,包括云数据库MySQL、云数据库MariaDB、云数据库SQL Server等,可以满足不同场景下的需求。您可以根据具体的业务需求选择适合的数据库产品。更多关于腾讯云数据库产品的信息,您可以访问以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL 锁机制和事务

表明对同一个事务来说第一次读数据时会创建快照,事务结束前的其他读操作(不加锁)会获得和第一次读相同的结果。...对update语句来说,如果对应的行上已经有锁,则InnoDB会执行半一致读的操作,来确定update语句对应的行在上次commit之后的数据是否锁的范围,如果不是,则不影响update操作,如果是...默认情况下autocommit属性是开启的,也就意味着当每个SQL语句最后执行结果不返回错误时都会执行commit语句,当返回失败时会执行rollback语句  而当autocommit属性开启时,可以通过执行...、以及加锁读操作,但不会阻止对涉及行上的一般读(不加锁)操作  同样,锁的释放也是事务提交或者回滚之后  比如在子表中插入一行数据,要确保对应的列父表中有值,通过一般的读操作先查父表有值然后再插入的方法是不保险的...Delete语句会对扫描索引的行上施加排他next-key锁,除非是当碰到使用唯一索引查找唯一值时只唯一值上施加锁 Insert语句会对索引扫描的行上施加锁,但不是next-key锁,所以不会阻止其他事务对该行值前的间隔上插入数据

76810

MySQL 高频面试题解析 第07期:有哪些死锁场景

update;…1 row in set (0.00 sec) select * from dl where a=2 for update;…1 row in set (0.00 sec) select...commit; commit; session1 等待 session2 释放 a=2 的行锁,而 session2 等待 session1 释放 a=1 的行锁。...1213 (40001): Deadlock found when trying to get lock; try restarting transaction commit; commit; 这个实验也是两个...当 session1 执行完 insert 语句,会在索引 a=3 上加记录锁,当 session2 执行同样的 insert 语句时,唯一键冲突,加上读锁;同样 session3 也会加上读锁。...专栏《MySQL 高频面试题解析》系列文章推荐 第01期:一条 update 语句的生命历程 第02期:当前读和快照读的区别 第03期:InnoDB 怎么做表空间迁移 第04期:RR 隔离级别下真的不会产生幻读吗

46240

MySQL--事务

; 回滚 select ROW_COUNT(); ROW_COUNT();执行增,删,改操作的SQL语句时如果执行成功返回大于0的结果,执行失败返回0 银行转账案例: set @@autocommit...=0; start transaction; update mybank set bank=bank-500 where id=1; select ROW_COUNT(); update mybank...set bank=bank+500 where id=3; select ROW_COUNT(); commit; rollback; ##根据select ROW_COUNT();来判定是否要提交还是回滚...幻读 事务A一个事务中查询数据,第一次查询出现两条,同时事务B添加数据并提交,事务A再次查询数据出现了3条,这时就叫幻读 15.4 隔离级别 REPEATABLE-READ 这是mysql默认的事务隔离级别...幻读就是事务B添加后进行了commit,事务A多次读取的记录的数量不一致,这就是幻读。

19530

【眼见为实】自己动手实践理解数据库REPEATABLE READ && Next-Key Lock

还是上一篇中模拟不可重复读的例子: 事务1: START TRANSACTION; ① SELECT sleep(5); ② UPDATE users SET state=1 WHERE id=1; COMMIT...模拟不可重复读的事务中,事务2创建时,会生成一份read view。事务1的事务id trxid1=1,事务2的事务id trxid2=2。假设事务2第一次读取数据前的此行数据的事务trxid=0。...事务2中语句①执行前生成的read view为{1},trxidmin=1,trxidmax=1。因为trxid(0)<trxidmin(1),该行记录的当前值可见,将该可见行的值state=0返回。...事务1: START TRANSACTION; SELECT * FROM users; SELECT sleep(10); SELECT * FROM users; COMMIT; 事务2: START...TRANSACTION; SELECT sleep(5); INSERT INTO users VALUES(2,'song',2); COMMIT; 执行结果: 1.预期结果 ?

43421

Mysql高可用高性能存储应用系列2 - 深入理解锁和Mvcc

全局锁全局锁就是对整个数据库实例加锁,当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句...//加锁lock tables 表名 ... read/write;//释放锁unlock tables;表级锁分读锁和写锁,1)读锁,进行读锁时,读不会受到影响但是会阻塞其他进程的insert、update...//select * from Table //快照读//Insert Update Delete //当前读//Select ... lock in share mode //当前读//Select...|+-----------------------+-----------------+1 row in set (0.07 sec)mysql> select @@transaction_isolation...读已提交(read committed):只有第一次时生成读视图,之后没次都使用第一次时的读视图。

39331

mysql事务隔离级别 以及 悲观锁-乐观锁

可靠性: 日志保存 事务记录,以防软硬件崩溃之后 可以恢复之前的事务操作 以上不是重点,重点是 对事务控制语句不熟悉。...事务控制语句 BEGIN 或者 START TRANSACTION: 显示的开启一个事务。 事务执行的结果有两个: 1)COMMIT: 提交事务,并将记录修改 写入数据库。...A concurrent transaction may update the record, delete it, insert new records....幻读是指,一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了。...Phantom Read 事务B第3步第一次读取id=99的记录时,读到的记录为空,说明不存在id=99的记录。随后,事务A第4步插入了一条id=99的记录并提交。

1K40

MySQL 中的 INSERT 是怎么加锁的?

语句首先会对记录加插入意向锁,插入意向锁和 GAP 锁冲突,所以不存在幻读;如果先执行 insert 语句后执行 select...lock in share mode 语句,由于 insert 语句插入记录之后...第一次看 MySQL 源码可能会有些不知所措,调着调着就会迷失深深的调用层级中,我们看 insert 语句的调用堆栈,一开始时还比较容易理解,从 mysql_parse -> mysql_execute_command...点击关注公众号,Java干货及时送达 所以,根本就不存在之前说的先加插入意向锁,再加排他记录锁的说法,执行 insert 语句时,什么锁都不会加。...,所以也不存在活跃事务,不会触发隐式锁转换,这条语句返回 0 条记录,并加上 GAP 锁;而 insert 语句继续写数据,不加任何锁, insert 事务提交之后select ... lock...不过事实上,这条 SQL 语句执行的时候卡住了,并不会返回 0 条记录。

10K51

事务隔离级别与MVCC (1)—mysql进阶(六十七)

幻读(Phantom) 幻读意味着insert,多次查询的数据,不一致,并且增多了。 场景:trx1读取两次,第一次读取了一条记录,第二次读取了两条记录,trx2事务insert了新纪录到表里。...Read commit:提交读。只发生不可重复读,幻读。 Repeatable read:可重复读。只发生幻读。 Serializable:可串行化。全部不会发生。...; 则只对执行完该语句之后产生的会话起作用,当前已存在的会话无效。...该语句可以已开启事务中间执行,但不会影响正在执行的事务。 如果在事务之间执行,则对后续事务有效。...* FROM hero WHERE number = 1; # 得到的列name的值为'刘备' 这个select的执行过程如下: 执行select语句时会生成一个read View,readView的

34920

mysql的几种锁_初中常见七种沉淀

insert into test(id, name) values(16, "test2"); commit; 在这个并发场景下,两个事务均能成功提交,而不会有死锁。...SELECT和LOAD DATA语句,但不包括纯INSERT。 InnoDB处理每行时一次为AUTO_INCREMENT列分配一个新值。 4....row模式: row模式下,日志中会记录成每一行数据被修改的形式,然后slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有sql多表关联的情况。...如果在自动递增计数器初始化前使用SHOW TABLE STATUS语句查看表, InnoDB将初始化计数器值,但不会递增该值。这个值会储存起来以备之后的插入语句使用。...当服务器停止并重新启动时,InnoDB会重新初始化每个表的计数器,以便对表进行第一次INSERT,如前所述。

77620

MySQL常见的七种锁详细介绍

insert into test(id, name) values(16, "test2"); commit; 在这个并发场景下,两个事务均能成功提交,而不会有死锁。...SELECT和LOAD DATA语句,但不包括纯INSERT。 InnoDB处理每行时一次为AUTO_INCREMENT列分配一个新值。 4....row模式: row模式下,日志中会记录成每一行数据被修改的形式,然后slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有sql多表关联的情况。...如果在自动递增计数器初始化前使用SHOW TABLE STATUS语句查看表, InnoDB将初始化计数器值,但不会递增该值。这个值会储存起来以备之后的插入语句使用。...当服务器停止并重新启动时,InnoDB会重新初始化每个表的计数器,以便对表进行第一次INSERT,如前所述。

95320

Hibernate save, saveOrUpdate, persist, merge, update 区别

hibernate save()方法会立即返回id,原因很可能是调用save()的同时这个实体对象已经被写入数据库(立即执行sql语句insert into) 提交事务或者调用flush()方法,save...如果该持久化对象没有改变,hibernate不会发出update语句。如果多次运行示例程序HibernateSaveExample.java,会发现从第二次开始程序就不会发送update语句。...因为hibernate更新之前会先select,查询该持久化对象,发现该对象和数据库中的一致,就不会做update操作。...原作者的意思可能是:persist()方法只能够事务中被执行,才能够将数据插入到数据库中) 最后,persist()方法返回值是void,也就是说不会返回任何的值。...hibernate save()方法会立即返回id,原因很可能是调用save()的同时这个实体对象已经被写入数据库(立即执行sql语句insert into) 提交事务或者调用flush()方法,save

2.3K30

关于数据库事务的知识点归纳

5.1 事务开启的标志 任何一条DML语句执行,标志事务的开启 5.2 事务结束的标志 提交或者回滚 6 事务自动提交机制的关闭方式 MySQL数据库管理系统中,默认情况下,事务是自动提交的,也就是说...; 手动开启事务 DML语句… DML语句… DML语句commit; 手动提交事务【事务成功的结束】 start transaction; 手动开启事务 DML语句…...select语句时可能看到不一样的结果。...导致原因可能有:(1)有一个交叉的事务有新的commit,导致了数据的改变;(2)一个数据库被多个实例操作时,同一事务的其他实例该实例处理其间可能会有新的commit mysql> set global...; Database changed mysql> select * from tx1; Empty set (0.01 sec) ③会话1 # 继续会话1窗口 mysql> commit; Query

63930
领券