社区
MySQL
帖子详情
查询-插入问题。如何保证数据完整性?
madmanahong
2010-12-17 02:02:15
有这么一种情况,就是
1. select .. from .. where..
来查询一个人是否存在
2. insert ..
如果此人存在,那么就插入到另一个表中。
但是由于并发,导致session 2在session 1进行完第一步的时候,将此人删除了。
此时session 1还不知道,造成了session 1执行成功,插入了一条无效的数据(因为此人在session 2已经被删除了)
这种情况如何做呢?
...全文
123
9
打赏
收藏
查询-插入问题。如何保证数据完整性?
有这么一种情况,就是 1. select .. from .. where.. 来查询一个人是否存在 2. insert .. 如果此人存在,那么就插入到另一个表中。 但是由于并发,导致session 2在session 1进行完第一步的时候,将此人删除了。 此时session 1还不知道,造成了session 1执行成功,插入了一条无效的数据(因为此人在session 2已经被删除了) 这种情况如何做呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yun3948
2010-12-23
打赏
举报
回复
完全不懂。都是牛人
Tirecoed
2010-12-22
打赏
举报
回复
[Quote=引用 5 楼 madmanahong 的回复:]
引用 4 楼 iihero 的回复:
将事务隔离级设为可串行化,即可避免此问题。
到底是设置成串行化好呢?还是LOCK TABLES好呢?
[/Quote]
学习!……
iihero
2010-12-17
打赏
举报
回复
[Quote=引用 5 楼 madmanahong 的回复:]
引用 4 楼 iihero 的回复:
将事务隔离级设为可串行化,即可避免此问题。
到底是设置成串行化好呢?还是LOCK TABLES好呢?
[/Quote]
如果是MyISAM引擎,只能lock tables
如果是InnoDB引擎,可以通过设置隔离级来做。
zuoxingyu
2010-12-17
打赏
举报
回复
照楼主的意思是这样的吧
insert into tb2 select * from tb1 where userid=100;
这样的情况下,执行的过程中会给TB1加表锁,其他连接是不能够进行DELETE的。
madmanahong
2010-12-17
打赏
举报
回复
[Quote=引用 4 楼 iihero 的回复:]
将事务隔离级设为可串行化,即可避免此问题。
[/Quote]
到底是设置成串行化好呢?还是LOCK TABLES好呢?
iihero
2010-12-17
打赏
举报
回复
[Quote=引用楼主 madmanahong 的回复:]
有这么一种情况,就是
1. select .. from .. where..
来查询一个人是否存在
2. insert ..
如果此人存在,那么就插入到另一个表中。
但是由于并发,导致session 2在session 1进行完第一步的时候,将此人删除了。
此时session 1还不知道,造成了session 1执行成功,插入了一条无效的数据(因为此人在sessio……
[/Quote]
将事务隔离级设为可串行化,即可避免此问题。
zz_d
2010-12-17
打赏
举报
回复
这是 同步 的问题了,在一个 session 获取或修改表的数据前, 先对该表加锁.
楼主可以好好看一下 "lock table" 方面的资料.
ACMAIN_CHM
2010-12-17
打赏
举报
回复
SESSION1, SESSION2 执行的语句都是什么?举例说明。
小小小小周
2010-12-17
打赏
举报
回复
事务或锁机制来实现.
外键
查询
_数据库中为什么不推荐使用外键约束
本文探讨外键约束,它能
保证
表间数据关系完整,有
保证
数据完整性
和一致性、级联操作方便等优点。但也存在性能、并发、扩展性和技术等
问题
,如
插入
数据时需额外
查询
、高并发易死锁、分库分表不便、增加数据库性能开销等,因此不推荐使用。
在数据库中为什么不推荐使用外键约束?
本文探讨数据库外键使用
问题
。外键能
保证
表间数据关系完整,有
保证
数据完整性
和一致性、级联操作方便等优点。但也存在性能、并发、扩展性和技术等方面的缺陷,如
插入
数据时需额外
查询
、高并发易死锁等,因此不推荐使用。
mysql没有主键报错
本文围绕MySQL无主键报错
问题
展开。介绍了主键概念,它能唯一标识表中每行数据,
保证
数据完整性
。通过示例代码展示无主键表
插入
重复数据的
问题
及添加主键的方法。强调了主键对提高
查询
效率的重要性,还给出主键选择策略和添加主键的流程图。
【MySQL进阶·深入索引】4.1 唯一索引
本文详细介绍了MySQL唯一索引的创建、作用、注意事项、与主键索引的区别,以及如何选择使用唯一索引或主键。强调了唯一索引在
保证
数据完整性
、提升
查询
性能和防止重复
插入
方面的价值,同时也提醒了过度索引可能带来的
问题
。并给出了优化唯一索引使用的建议,如避免过度索引,定期维护和监控索引状态。
MySQL 幻术月读-幻读
本文探讨了MySQL中InnoDB的可重复读隔离级别下出现的幻读
问题
。幻读是指在当前读模式下,事务前后两次
查询
同一范围的数据,第二次
查询
出现了第一次未见的新行。幻读产生的原因是行锁无法锁定尚未存在的记录。为了解决幻读,InnoDB引入了间隙锁,通过锁定记录之间的间隙防止新行
插入
,从而确保事务的语义完整性和数据一致性。然而,间隙锁也会带来并发度降低和死锁风险。设置隔离级别为读提交可以避免间隙锁,但可能需要配合binlog_format=row以
保证
数据一致性。
MySQL
57,064
社区成员
56,760
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章