我只是很好奇,我检查了文档: https://dev.mysql.com/doc/refman/5.6/en/datetime.html
但是,如果时间戳的值是根据运行查询的时间或作为其一部分的事务的提交而设置的,那么它并没有特别说明:
CREATE TABLE some_schema.some_table (
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
some_field VARCHAR(50) DEFAULT NULL,
last_changed_ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
);
START TRANSACTION;
INSERT INTO some_schema.some_table (some_field) VALUES ("Foo");
INSERT INTO some_schema.some_table (some_field) VALUES ("Bar");
COMMIT;
虽然显然这将是同一时间,因为它会运行得如此之快(并且从我理解的内容中剥离微秒),想象运行1万亿或者某些插入,它们的last_changed_ts
值是否相同,因为它们都是在一个事务中提交的,或者根据INSERT语句的运行时间是否存在差异?
- 实际上,在写完这些之后,我意识到只需设置一个简单的python脚本来启动事务,插入,休眠和重新插入并检查自己,这是微不足道的。我已经把这一切全部写完了,谷歌搜索时找不到快速答案所以我离开了它,也许其他人想把他们有趣的两分钱扔进去,但如果不是我会发布我的发现在接下来的一天中进行的简单测试。
答案 0 :(得分:2)
时间戳是每个插入查询开始执行查询时的时间戳。如果在单个插入语句中插入大量行,则所有行的时间戳都相同,并且将是查询开始执行时的时间戳。
提交事务并不会改变这些值,因为插入的行可以在提交之前读回,这一点很明显,如果它们的值随后因为你提交了插入而改变了就没有意义了。