Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql表中添加具有随机时间戳的列_Mysql - Fatal编程技术网

在mysql表中添加具有随机时间戳的列

在mysql表中添加具有随机时间戳的列,mysql,Mysql,我想在现有mysql表中添加一个默认值为random timestamp的新列。随机时间戳应介于(现在+3小时)和(现在+3.5小时)之间。我使用了下面的sql命令,它给出了错误: alter table latency_adjustment_rules add column expiration_timestamp TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) + FLOOR(RAND() * 3600)) + 10800 错误: 错

我想在现有mysql表中添加一个默认值为random timestamp的新列。随机时间戳应介于(现在+3小时)和(现在+3.5小时)之间。我使用了下面的sql命令,它给出了错误:

alter table latency_adjustment_rules 
add column expiration_timestamp TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) + FLOOR(RAND() * 3600)) + 10800
错误:

错误1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“+FLOOR(RAND()*3600))+10800”附近使用的正确语法


有人能建议一下我的mysql语句有什么问题吗?

您不能这样定义默认值。你能做的最好的事情就是使用触发器。查看手册中的示例


您还需要检查如何指定时间间隔。您可能想使用Unix时间戳(MySQL时间戳是以前的2018-10-10 23:14:37,不能通过增加秒来增加,您需要使用DATE\u ADD)

这是通过插入实现的方法:

DELIMITER \\
CREATE TRIGGER latency_adjust
BEFORE INSERT ON latency_adjustment_rules
FOR EACH ROW
BEGIN
    IF NEW.expiration_timestamp IS NULL THEN
        SET NEW.expiration_timestamp = NOW() + INTERVAL (FLOOR(RAND() * 3600) + 10800) SECOND;
    END IF;
END\\

我在上创建了一个小的演示示例。

表中有一些现有数据,我只想在添加列的第一次使用这些数据的随机过期时间。你能举一个日期添加的例子吗?你可以把它作为插入的一部分来做。谢谢你对这个例子的帮助。但是我的过期时间戳不能为空。如果我将其指定为非null,那么我必须为其指定一些默认值,而now()不能作为默认值,因为我希望过期时间为now()+3小时。在这种情况下,我如何添加触发器?@Priyanka尽管我的列定义允许列具有
null
值,触发器将确保它从不为
NULL
。查看“我的更新”,您可以选择不插入过期时间或值,无论哪种方式,都可以将值插入到列中,并且它永远不会变成
NULL