根据此处给出的定义:https://dev.mysql.com/doc/refman/5.7/en/create-table- generated-columns.html
如果给定表中相同的数据,多次调用会产生相同的结果,而与连接的用户无关,则函数是确定性的。
据我了解,unix_timestamp() 对于相同的输入总是给出相同的结果。
但是,当我尝试使用 UNIX_TIMESTAMP(epochtime) 创建生成列时,它会给出一个错误,因为函数不允许。
ALTER TABLE `test_table`
ADD COLUMN epoch_updated_at BIGINT(15)
AS (UNIX_TIMESTAMP(updated_at)) STORED
更新:我发现 MYSQL 确实将 unix_timestamp 视为不确定性,位于 https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html#replication-rbr-safe-不安全-不。我不确定,为什么?
unix_timestamp 参数是 date 类型,其值受会话时区影响。如果要创建一个生成列来表示纪元秒,可以使用以下语句:
ALTER TABLE `test_table`
ADD COLUMN epoch_updated_at BIGINT(15)
AS (TIMESTAMPDIFF(SECOND, from_unixtime(0), updated_at))