mysql延迟插入时间戳

标签 mysql insert timestamp delayed-execution

我有一个包含字段的表::ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP

我的问题是,如果我在这个表上使用延迟插入,时间戳是请求排队的时间还是实际插入的时间?

最佳答案

答案是在请求排队时,但在发出请求时不一定是正确的,因为如果尚未建立表的线程,则请求会在建立后排队。

来自mysql 5.1 dev docs :

The thread executes the INSERT statement, but instead of writing the row to the table, it puts a copy of the final row into a queue that is managed by the handler thread. Any syntax errors are noticed by the thread and reported to the client program.

延迟语句执行时的事件顺序:

  1. 如果表的处理程序线程还没有,则创建一个处理程序线程
  2. 处理程序检查或等待获取DELAYED
  3. 处理程序执行 INSERT 并将最后一行放入队列
  4. 当实际插入该行时,更新二进制日志
  5. 处理程序一次写入 delayed_insert_limit 行,并在写入之间执行任何挂起的 SELECTS
  6. 当队列为空时,释放DELAYED

根据是否需要创建线程以及检查或获取DELAYED锁需要多长时间,执行语句(步骤0)和执行语句之间的时间声明(第 3 步)会有所不同。然后,根据队列的大小(特别是如果它超过 delayed_insert_limit 行),以及是否有任何未决的 SELECTS 发生,写入将被延迟一些不可预测的时间.

关于mysql延迟插入时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4410878/

相关文章:

mysql - Openshift phpmyadmin 连接错误 (http/https)

mysql - 用于日志记录的数据库索引和查询优化

Android SQLite 插入或替换

php - SQL 查询 INSERT 无法将值插入我的数据库

android - 为 DynamoDB Android SDK 实现 CreatedAt 和 UpdatedAt 时间戳

java - 如何在带有转换器的 JSF View 中使用 java.sql.Timestamp

mysql - 在特定商品的订购日期之前订购的商品

MySQL - 多重联合

java - 检查具有相同 ID 的相似行是否已插入表中?

php - 恢复 PHP 和 MySQL 之间的时间戳差异