我有一个包含字段:: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
我的问题是,如果我在此表上使用延迟插入,时间戳是请求排队的时间还是实际插入的时间?
答案 0 :(得分:6)
答案是请求排队时,但是在发出请求时不一定正确,因为如果没有表,则在建立表的线程后排队请求。
线程执行INSERT 声明,但不是写 排到表中,它放了一份副本 最后一行进入队列即是 由处理程序线程管理。任何 语法错误被注意到了 线程并报告给客户端 程序
延迟语句执行时的事件顺序:
DELAYED
锁定INSERT
并将最后一行放入队列delayed_insert_limit
行并在写入之间执行任何挂起的SELECTS
DELAYED
锁取决于是否需要创建线程以及检查或获取DELAYED
锁所需的时间,执行语句(步骤0)和执行语句之间的时间(步骤3)会有所不同。然后,根据队列的大小(特别是如果它超过delayed_insert_limit
行),以及是否有任何挂起的SELECTS
发生,写入将被延迟一段不可预测的时间。
答案 1 :(得分:1)
无论是否使用INSERT DELAYED
,或者由于另一个线程或更新或其他因素而导致表被锁定,ts
将采用的值等于INSERT
发布的时间
答案 2 :(得分:0)
应该花费实际插入的时间