假设我有一个多次运行的查询,因为它在一个将数据插入表的 while 循环中。
INSERT INTO <table>( psuiKey, group_id) VALUES ('54ds8a784daEd','1');
问题是当来自不同计算机的两个用户同时添加数据时。所以发生的事情是用户 1将数据添加到表中,如下所示:
psuiKey group_id
54ds8a784daEd 1
54ds8a785daEd 1
同时用户 2在2group_id
处添加数据,但数据如下所示:
psuiKey group_id
54ds8a784daEd 1
54ds8a785daEd 1
54ds8a786daEd 1
54ds8a787daEd 1
代替:
psuiKey group_id
54ds8a784daEd 1
54ds8a785daEd 1
54ds8a786daEd 2
54ds8a787daEd 2
所以简而言之,如果两个用户同时添加相同的数据,那么group_id
当我发现 maxgroup_id
使用时不会改变:
SELECT MAX(group_id) + 1
因此,当两个用户同时添加数据时,SQL 无法更新它。
注意我不能用group_id
作主键,我也使用datetime
.
所以任何帮助都会有所帮助!
您可以尝试许多替代方案,例如对 SELECT 查询强制执行排他表锁定(从而将一个条目延迟到另一个条目之后)。
我个人最喜欢的是强制执行 staging - 生产表,就像我管理的许多测试应用程序一样。
这样,时间或顺序都无关紧要。请记住 group_ID 列是数据库列,因此最好不要迷失在一个值的细节中,该值的唯一目的是强制区分组
给定
PRIMARY KEY (psuiKey)
(或UNIQUE
),这将做你想要的一部分:psuiKey
但是您的示例显示了具有相同值的两行。这没有多大意义,并且您没有提供任何方法来区分 4 行中的任何一行。你有没有隐瞒一些细节?您提到了 adatetime
,但没有解释其相关性。