mysql延迟了插入时间戳

时间:2010-12-10 16:15:42

标签: mysql insert timestamp delayed-execution

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

的表

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

3 个答案:

答案 0 :(得分:6)

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

来自mysql 5.1 dev docs

  

线程执行INSERT   声明,但不是写   排到表中,它放了一份副本   最后一行进入队列即是   由处理程序线程管理。任何   语法错误被注意到了   线程并报告给客户端   程序

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

  1. 如果没有一个
  2. ,则创建该表的处理程序线程
  3. 处理程序检查或等待获取DELAYED锁定
  4. 处理程序执行INSERT并将最后一行放入队列
  5. 实际插入行时,二进制日志会更新
  6. 处理程序一次写入delayed_insert_limit行并在写入之间执行任何挂起的SELECTS
  7. 当队列为空时,释放DELAYED
  8. 取决于是否需要创建线程以及检查或获取DELAYED锁所需的时间,执行语句(步骤0)和执行语句之间的时间(步骤3)会有所不同。然后,根据队列的大小(特别是如果它超过delayed_insert_limit行),以及是否有任何挂起的SELECTS发生,写入将被延迟一段不可预测的时间。

答案 1 :(得分:1)

无论是否使用INSERT DELAYED,或者由于另一个线程或更新或其他因素而导致表被锁定,ts将采用的值等于INSERT发布的时间

答案 2 :(得分:0)

应该花费实际插入的时间