当前位置: 首页 > 知识库问答 >
问题:

如何定期更新Laravel中一百万条记录的数据库表列?

谭修然
2023-03-14

在我的用户表中,我需要在凌晨12点将“每日”列恢复为默认值“1”。

    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name', 50);
        $table->string('email')->unique();
        $table->unsignedTinyInteger('daily')->default('1');
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

是否有一种方法可以让我在每天上午12点将值恢复为默认值1或将100万条记录的值更新为1,而不延迟任何时间(意味着所有用户的“每日”列将同时更新)?

注:“每日”列用于确定用户是否已“用完”其每日单击。用户每天有1次机会点击按钮(有点像奖励框)。单击按钮后,每日将更新为“0”,直到第二天才能再次单击按钮。

共有2个答案

鲁淇
2023-03-14

您需要在具有可序列化的序列化级别的事务中执行更新,以确保它一次完成,并且没有其他事务干扰更新。至于时间,我不知道你如何能在00:00准确完成更新。不管你做什么,它都会在午夜之前或之后发生。另一个解决方案是为每一行设置一个时间戳,并在更新时使用触发器来检查时间戳是否在午夜之前,以及时间是否在午夜之后,在该特定行上设置您想要的列。这也应该在事务中完成。

锺星洲
2023-03-14

而不是使用循环,你可以使用这样的雄辩:

 Model::whereIn('id', $request->'name coloumn')->update(['name coloumn' => 1]);
 Model::whereNotIn('id', $request->'name coloumn')->update(['name coloumn' => 0]);
 类似资料:
  • 问题内容: 有一个数据库,它在一个表中大约包含200万条记录。我从我的Java代码中运行查询,例如“ select * from table”。是否将从结果集中的数据库中获取完整数据。或不 。如果是,那么它将如何工作,我想学习此检索工作, 请让我知道,我在某处了解到它将从数据库中检索完整的数据并将其存储在临时存储中,并在输出中显示出来。还是与J2C有关 问题答案: 它会从结果集中的数据库中获取完整

  • 我想更新postgres表的一列。记录大约有5500万条,所以我们需要在10000条记录中更新它。注意:我们要更新所有行。但我们不想锁桌子。 我正在尝试以下查询- 我们如何为每10000条记录更新做一个循环? 如有任何建议和帮助,将不胜感激。 PostgreSQL 10.5

  • 我有一个“Customer”表,它有将近120万条记录,其中一列是ntext类型的“customer_records ”,它包含xml数据。我需要在该列的所有现有记录中替换一个url值。我尝试了下面的替换查询,但是执行该查询需要大约20分钟的时间。 在更新期间,CPU 消耗被利用到最大,这引起了问题。在 120 万条记录中,实际更新的记录中有 60 万条记录,但查询需要读取每条记录以查找和替换 U

  • 在一个小例子中,我们必须将数以百万计的记录从teradata数据库复制到Oracle DB。 环境:Spring Boot Spring JDBC(jdbcTemplate)Spring REST Spring调度程序Maven Oracle Teradata 使用Spring JDBC的batchUpdate将数据插入目标数据库Oracle。 在源数据库的SQL查询中使用teradata的“前1

  • 有一列我想检索并插入到另一个表中例如,下面是我想检索值的第一个表 我使用MSSQL2008

  • 我想更新值。如何在查询生成器中执行此操作?