仅更新MySql表

时间:2016-10-25 12:30:08

标签: mysql

鉴于此表

mysql> describe last_user_activity;
+--------------+------------+------+-----+-------------------+-------+
| Field        | Type       | Null | Key | Default           | Extra |
+--------------+------------+------+-----+-------------------+-------+
| customer_id  | int(11)    | NO   |     | NULL              |       |
| token        | text       | NO   |     | NULL              |       |
| time_stamp   | timestamp  | YES  |     | CURRENT_TIMESTAMP |       |
| is_logged_in | tinyint(1) | NO   |     | 0                 |       |
+--------------+------------+------+-----+-------------------+-------+
4 rows in set (0.00 sec)

我想“触摸”表格的一行,将time_stamp设置为默认值CURRENT_TIMESTAMP

我以为我可以试试

UPDATE last_user_activity WHERE token="40aed4d9-c9ac-471e-8d53-b2baa0d72523";

(这是表中的有效令牌),但结果是

  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   在'WHERE附近使用的语法   第1行的token =“40aed4d9-c9ac-471e-8d53-b2baa0d72523”

哦,好吧,它看起来很聪明,但NVM。那么,我试过

UPDATE last_user_activity SET token="40aed4d9-c9ac-471e-8d53-b2baa0d72523" 
       WHERE token="40aed4d9-c9ac-471e-8d53-b2baa0d72523";

表示成功, BUT ,时间戳字段未更新。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

UPDATE last_user_activity 
SET time_stamp = NULL
WHERE token="40aed4d9-c9ac-471e-8d53-b2baa0d72523";

OR

UPDATE last_user_activity 
SET time_stamp = NOW()
WHERE token="40aed4d9-c9ac-471e-8d53-b2baa0d72523";

答案 1 :(得分:1)

看起来您已经给出了列time_stamp的默认值,但是没有给出更新时的默认值。 您可以考虑这一变化:

ALTER TABLE last_user_activity   MODIFY COLUMN time_stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

我希望这可行。之后你可以尝试使用更新命令。