【问题标题】:Inserting and viewing data simultaneously from a single table从单个表中同时插入和查看数据
【发布时间】:2011-03-10 06:26:12
【问题描述】:

我希望当用户将数据插入表中时,他也在同时查看它。

为此,如果我使用单个表,那么是否会花费更多时间和处理负载,因为这两个进程:INSERT 和 SELECT,都将发生在同一个表上?

所以我希望这两个进程分别在两个不同的数据库对象上执行。

像 INSERT 应该在一个数据库对象上完成,而 SELECT 应该从另一个数据库对象上完成,但是插入的数据将被 Select 查询看到。

解决办法是什么?我应该使用临时表、视图还是两个单独的表,但是如果我使用两个单独的表,那么就会有数据复制。

那我该怎么办?请帮忙。

我的 Winform 应用程序将在 LAN 上的 3 台 PC 上运行,而 SQL Server 仅在一台 PC 上运行。

在这种情况下,每分钟所有 3 个用户都会插入数据。因此,如果 pc2 上的另一个用户更新了数据,我会立即在 pc1 上向用户显示数据

【问题讨论】:

    标签: sql sql-server sql-server-2005 insert-select


    【解决方案1】:

    你真的试过在同一张桌子上读写吗? RDBMS 是为并发而设计的。我们每分钟写入数百万行,并在同一分钟内对相同数据进行数十个复杂聚合。我们没有发现任何问题。

    数据必须从 tablewrite 到 tableread:这意味着在某些时候对 tablewrite 进行读取。现在,您可以在触发器(或某些此类方式)中维护它,这意味着每次写入都需要额外处理。

    注意:您可以使用OUTPUT clause 读取刚刚插入的数据。

    您也可以尝试snapshot isolation,但鉴于您没有问题,为什么不保持简单,只使用一张桌子

    【讨论】:

    • @gbn: 先生,您的意思是说,如果我在同一个表上执行这两项操作,并且不使用任何其他表、视图或其他方式,它不会给任何负载或速度减慢
    • 对于 99.99% 的情况,正确。没关系。您不在 0.01% 的案例中。
    • 不要忘记保持数据一致的乐趣和游戏。在您的插入被提交之前,它甚至对其他进程都不可见。提交得太早,您可能会遇到一致性问题。但基本上是@gbn 所说的。你不太可能做任何与众不同的事情。
    • @lll:当然,除非那些查询使用READUNCOMMITTED..... 那么他们也会看到尚未提交的数据......
    • @gbn:我的应用程序将在 3 台计算机上运行,​​其中一台具有 lan 和 sql server。在这种情况下,每分钟所有 3 个用户都会插入 data 。因此,如果 pc2 上的另一个用户更新了数据,我会立即在 pc1 上向用户显示数据。
    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多