Bre*_*bad 11 mysql query datetime mariadb-10.2
我遇到了类似的查询
INSERT INTO mytable (id, Created, Updated) VALUES (null, NOW(), NOW())
Run Code Online (Sandbox Code Playgroud)
有列定义
| Created | datetime |
| Updated | datetime |
Run Code Online (Sandbox Code Playgroud)
在这种情况下,MySQL 是否会将 NOW() 值设置为当前时间并向两个调用返回相同的值,或者该查询是否会运行(不太可能)风险,即 Created 和 Updated 的时间略有不同?
注意:我无法更改字段类型。
dan*_*ack 23
NOW()
和其他日期时间函数返回的时间来自查询的开始时间。THD
这里的类用于包含连接的所有信息。该NOW()
功能的实现抓住这个值,并将其返回到now_time
结构。
MySQL文档NOW()
也说明:
NOW() 返回一个常数时间,指示语句开始执行的时间。...
您将始终NOW()
从查询中的任何位置获得相同的值。
MariaDB [test]> select now(),sleep(10),now();
+---------------------+-----------+---------------------+
| now() | sleep(10) | now() |
+---------------------+-----------+---------------------+
| 2021-03-22 14:17:05 | 0 | 2021-03-22 14:17:05 |
+---------------------+-----------+---------------------+
Run Code Online (Sandbox Code Playgroud)
值得注意的是,这不是每笔交易:
MariaDB [test]> start transaction
-> ;
Query OK, 0 rows affected (0.00 sec)
MariaDB [test]> select now();
+---------------------+
| now() |
+---------------------+
| 2021-03-22 14:20:53 |
+---------------------+
1 row in set (0.00 sec)
MariaDB [test]> select sleep(2);
+----------+
| sleep(2) |
+----------+
| 0 |
+----------+
1 row in set (2.00 sec)
MariaDB [test]> select now();
+---------------------+
| now() |
+---------------------+
| 2021-03-22 14:21:00 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
Ric*_*mes 17
另一方面: SYSDATE()
可以不同,但NOW()
不能。
mysql> select now(6), sysdate(6), now(6), sysdate(6);
+----------------------------+----------------------------+----------------------------+----------------------------+
| now(6) | sysdate(6) | now(6) | sysdate(6) |
+----------------------------+----------------------------+----------------------------+----------------------------+
| 2021-03-21 22:02:28.983211 | 2021-03-21 22:02:28.983368 | 2021-03-21 22:02:28.983211 | 2021-03-21 22:02:28.983370 |
+----------------------------+----------------------------+----------------------------+----------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我正在使用,(6)
所以我们可以看到精确到微秒的时间。请注意NOW
调用是如何相同的和最小值。同时,SYSDATE
调用较晚且彼此不同。
----- 2006-03-31 5.0.20 & 尚未发布 5.1.8 -- 添加或更改功能 -- -----
向 mysqld添加了--sysdate-is-now选项,以使SYSDATE()被视为NOW()的别名。请参阅日期和时间函数。(错误#15101)
----- 2005-09-22 5.0.13 候选版本 -- 修复了错误 -- -----
该SYSDATE()函数现在返回在它被调用时。特别是,在存储例程或触发器中,SYSDATE()返回它执行的时间,而不是存储例程或触发语句开始执行的时间。(错误#12480)
归档时间: |
|
查看次数: |
2430 次 |
最近记录: |