MySQL MD5(CURRENT_TIMESTAMP)更新

时间:2015-06-15 12:26:01

标签: mysql

我正在创建一个用户注册表单,当我通过电子邮件确认用户的电子邮件时,我需要某种独特的字符串来确认。

我没有在PHP中生成一个并将其插入到数据库中,而是想尝试在我的表中添加一个列,该列将保存一个我可以在需要确认时使用的唯一值。

我想要做的是将值设置为当前时间戳的MD5。我试着在phpMyAdmin中做SELECT MD5(CURRENT_TIMESTAMP)只是为了看看它是否会让我这样做,我想我会把它添加到更新条件但它似乎没有让我。

ALTER TABLE users ADD confirmation VARCHAR(40) DEFAULT NULL ON UPDATE MD5(CURRENT_TIMESTAMP);

以上是我尝试过的。我收到错误,我不知道该怎么做。

无论如何我能做到这一点或类似的事情吗?附带问题,ON UPDATE是否触发了刚刚插入的行?

2 个答案:

答案 0 :(得分:0)

为此目的使用通用唯一标识符。这是一个128位的唯一编号;它是为这种东西而设计的。

它有一个符合36个字节的字符串表示。

 aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

您可以使用大多数编程语言生成这些内容。在MySQL中,您使用UUID()函数来获取一个。每次调用UUID()时,都可以保证获得新值。

将CHAR(36)列添加到数据库,或者只使用VARCHAR(40)列。

除了本机时间戳之外,您不能使用数据定义语言(ALTER TABLE)来声明ON UPDATE。您需要应用程序代码来设置UUID值,就像您对MD5(CURRENT_TIMESTAMP)所做的那样。

答案 1 :(得分:0)

您尝试使用的语法不存在。看起来您正在考虑ON UPDATE CURRENT_TIMESTAMP,但根据https://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

,这是一个非常具体的命令
  

使用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP是   特别是TIMESTAMP。

因此ON UPDATE子句仅适用于CURRENT_TIMESTAMP,且仅适用于TIMESTAMP类型的字段。

如果您想使用当前时间戳的MD5设置触发器,或者只是手动设置值(例如UPDATE users SET confirmation=MD5(CURRENT_TIMESTAMP()) WHERE user_id=123)。

请记住,当前时间戳的MD5可能很容易被猜到/暴力强迫,所以不要依赖它来保证安全。