在MySQL查询中使用NOW()时可能出现延迟?

时间:2011-09-16 15:38:43

标签: mysql

我正在图书馆学习MySQL和PHP。我通过更改

的密码存储来提高密码加密系统的安全性
password=SHA('password')

password=SHA(CONCAT('password', '--', registration_date))

其中registration_date是用户注册时的时间戳。

注册用户的当前代码是:

INSERT INTO users (first_name, last_name, email, password, registration_date) 
VALUES ('first_name', 'last_name', 'email', SHA(CONCAT('password', '--', NOW())), NOW());

我需要担心那里有两个不同的NOW()函数吗?他们有可能会有不同的时间吗?我尝试了几个查询,似乎工作正常。

如果有问题,我该如何解决?

2 个答案:

答案 0 :(得分:3)

没问题。来自manual

  

NOW()返回一个常量时间,指示语句开始执行的时间。 (在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)

正如手册中的示例所示,无论评估之间经过了多长时间,语句中NOW()的每次评估都会返回相同的值。

答案 1 :(得分:0)

在一台服务器上,您不必担心。来自文档:

  

NOW()返回一个表示时间的常量时间   声明开始执行。

(http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_now)因此,一个查询中的值不会改变。

您应该注意基于语句的复制。如果您的数据库有可能以这种方式复制(例如,对于备份或HA),则从属服务器可能与主服务器具有不同的NOW()