视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
解读mysql时间函数sysdate()和now()_MySQL
2020-11-09 18:22:43 责编:小采
文档


bitsCN.com

解读mysql时间函数sysdate()和now()

NOW()

返回当前日期和时间值,其格式为 'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS , 具体格式取决于该函数是否用在字符串中或数字语境中。

mysql> SELECT NOW();

-> '1997-12-15 23:50:26'

mysql> SELECT NOW() + 0;

-> 19971215235026

在一个存储程序或触发器内, NOW() 返回一个常数时间,该常数指示了该程序或触发语句开始执行的时间。这同SYSDATE()的运行有所不同。

SYSDATE()

返回当前日期和时间值,格式为'YYYY-MM-DD HH:MM:SS' 或YYYYMMDDHHMMSS, 具体格式根据函数是否用在字符串或数字语境而定。

在一个存储程序或触发器中, SYSDATE()返回其执行的时间, 而非存储成都或触发语句开始执行的时间。这个NOW()的运作有所不同。

我的理解:

now()是应用向mysql服务器发起执行语句时(无论是发送的sql还是存储过程的名字),now()时间已经产生。

调用在该存储过程中或者sql中调用now(),即为调用该变量。

而sysdate()函数是每次实时去取的

在我们公司的业务中,由于禁止使用存储过程,显然无论使用sysdate()还是now()都能够满足业务需求。当然,考虑到sysdate要实时取时间,我认为now()是比较推荐的.

实践是检验真理的唯一标准:

1.存储过程:

BEGIN

select now(),sysdate();

select sleep(3) ;

select now(),sysdate();

END

执行结果:

mysql> call test;

+---------------------+---------------------+

| now() | sysdate() |

+---------------------+---------------------+

| 2011-01-21 11:22:58 | 2011-01-21 11:22:58 |

+---------------------+---------------------+

1 row in set (0.00 sec)

+----------+

| sleep(3) |

+----------+

| 0 |

+----------+

1 row in set (3.00 sec)

+---------------------+---------------------+

| now() | sysdate() |

+---------------------+---------------------+

| 2011-01-21 11:23:01 | 2011-01-21 11:23:01 |

+---------------------+---------------------+

1 row in set (3.01 sec)

Query OK, 0 rows affected (3.01 sec)

通过如上结果来看,第一个now()跟第二个now()执行结果不一致;对存储过程之内的now()函数,并非取自存储过程执行的开始时间。

2.sql语句测试:

mysql> select now(),sleep(3),now();

+---------------------+----------+---------------------+

| now() | sleep(3) | now() |

+---------------------+----------+---------------------+

| 2011-01-21 11:25:45 | 0 | 2011-01-21 11:25:45 |

+---------------------+----------+---------------------+

1 row in set (3.00 sec)

评:now()函数,每次取语句开始的执行时间.

mysql> select sysdate(),sleep(3),sysdate();

+---------------------+----------+---------------------+

| sysdate() | sleep(3) | sysdate() |

+---------------------+----------+---------------------+

| 2011-01-21 11:26:44 | 0 | 2011-01-21 11:26:47 |

+---------------------+----------+---------------------+

1 row in set (3.02 sec)

评:sysdate() 每次会取实际的时间。

综合上面的结果:

1.在公司绝大部分业务中now()函数已经够用,特别是gmt_create,gmt_modified字段的时间,无疑要用now()

2.sysdate()用在需要每个字段执行的时候实时取时间的。

3.mysql的字段是从左到右依次执行。

bitsCN.com

下载本文
显示全文
专题