相关疑难解决方法(0)

不可重复读和幻像读有什么区别?

不可重复读和幻读之间有什么区别?

我已经阅读了维基百科隔离(数据库系统)文章,但我有一些疑问.在下面的例子中,会发生什么:不可重复的读取幻像读取

交易A.
SELECT ID, USERNAME, accountno, amount FROM USERS WHERE ID=1
Run Code Online (Sandbox Code Playgroud) OUTPUT:
1----MIKE------29019892---------5000
Run Code Online (Sandbox Code Playgroud) 交易B.
UPDATE USERS SET amount=amount+5000 where ID=1 AND accountno=29019892;
COMMIT;
Run Code Online (Sandbox Code Playgroud) 交易A.
SELECT ID, USERNAME, accountno, amount FROM USERS WHERE ID=1
Run Code Online (Sandbox Code Playgroud)

另一个疑问是,在上面的例子中,应该使用哪个隔离级别?为什么?

database oracle transactions transaction-isolation isolation-level

137
推荐指数
7
解决办法
8万
查看次数

可序列化和可重复读取隔离级别之间有什么区别?

可序列化和可重复读取隔离级别之间有什么区别?任何人都可以举一个简单的例子.

sql database

37
推荐指数
2
解决办法
3万
查看次数

使用实体框架更新时获取“插入”输出

SQL Server 使用“inserted”关键字提供插入和更新记录的输出。

我有一个代表处理队列的表。我使用以下查询来锁定记录并获取锁定记录的 ID:

UPDATE TOP (1) GlobalTrans
SET LockDateTime = GETUTCDATE()
OUTPUT inserted.ID
WHERE LockDateTime IS NULL
Run Code Online (Sandbox Code Playgroud)

这将输出一个名为 ID 的列,其中包含所有更新的记录 ID(在我的例子中为单个 ID)。如何将其转换为 C# 中的 EF 来执行更新并取回 ID?

c# t-sql entity-framework entity-framework-6

6
推荐指数
1
解决办法
2684
查看次数

使用MySQL数据库处理PHP Symfony中的队列竞争条件

我在Symfony中有一个应用程序,需要从该应用程序发送电子邮件/通知。由于电子邮件/通知发送过程需要时间,因此我决定将它们放入队列并定期处理队列。因此,我可以减少涉及电子邮件/通知调度的请求的响应时间。

用于处理队列的Cron Job(一个php脚本-Symfony路由)每30秒运行一次,并检查是否发现未发送的Email / Notifications是否从Queue Table获取所有数据并开始发送。发送电子邮件/通知后,“队列表”行状态标志将更新以显示已发送。

现在,当队列中有更多电子邮件时,可能需要30秒钟以上才能发送。另一个Cron作业也开始运行,并开始从队列发送电子邮件。因此导致重复发送电子邮件/通知。

我的电子邮件队列表结构如下:

|-------------------------------------|
| id | email | body | status | sentat |
|-------------------------------------|
Run Code Online (Sandbox Code Playgroud)

解决这个问题的想法如下:

  1. 在数据库中设置一个正在运行Cron作业的标志,如果找到了设置的标志,则其他Cron作业不应继续进行。
  2. 将所有记录的状态更新为“已发送”,然后开始发送电子邮件/通知。

所以我的问题是,是否有任何有效的方法来处理队列?是否有Symfony Bundle / Feature可以完成此类特定任务?

php mysql cron symfony

5
推荐指数
1
解决办法
800
查看次数

Spring Boot Async ResultSet is closed

I'm implementing notifications using Spring Boot and notifying users in a different thread using @Async.

Without this annotation, everything works well, but for when I put it on the method I use to notify, in only one observable entity, the observers don't get notified and I get this stack trace:

Unexpected exception occurred invoking async method: public void pt.ulisboa.tecnico.socialsoftware.tutor.notifications.NotificationServic
e.notifyObservers(package.notifications.Observable,package.notifications.domain.Notification,ppackage.user.User)                                
                                                                                                                                                                                                                                               
org.hibernate.exception.GenericJDBCException: could not initialize a collection: [package.course.CourseExecution.users#11]
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
        at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:97) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
        at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:707) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final] …
Run Code Online (Sandbox Code Playgroud)

java spring asynchronous spring-boot

5
推荐指数
1
解决办法
618
查看次数

SQL Server:在事务中包装SELECT查询是否有任何性能损失?

作为学习练习,在尝试使用任何ORM(如EF)之前,我想使用ADO.NET和存储过程构建个人项目.

因为我不希望我的代码随着时间的推移变得混乱,我想使用一些模式,如存储库和UoW模式.

除了交易处理之外,几乎所有事情都已经解决了.

为了某种方式"模拟"一个UoW,我使用了@jgauffin 提供的这个类,但阻止我使用该类的是每次你创建该类的新实例(AdoNetUnitOfWork)时,你自动开始一个事务并且有很多您只需要读取数据的情况.

在这方面,这是我在我读过的一本SQL书中找到的:

在事务中执行SELECT语句可以在引用的表上创建锁定,这可以阻止其他用户或会话执行工作或读取数据

这是AdoNetUnitOfWork班级:

public class AdoNetUnitOfWork : IUnitOfWork
{
    public AdoNetUnitOfWork(IDbConnection connection, bool ownsConnection)
    {
        _connection = connection;
        _ownsConnection=ownsConnection;
        _transaction = connection.BeginTransaction();
    }

    public IDbCommand CreateCommand()
    {
        var command = _connection.CreateCommand();
        command.Transaction = _transaction;
        return command;
    }

    public void SaveChanges()
    {
        if (_transaction == null)
            throw new InvalidOperationException("Transaction have already been commited. Check your transaction handling.");

        _transaction.Commit();
        _transaction = null;
    }

    public void Dispose()
    {
        if (_transaction != null) …
Run Code Online (Sandbox Code Playgroud)

c# sql-server ado.net unit-of-work sqltransaction

1
推荐指数
1
解决办法
559
查看次数