Error number: 3767; Symbol: ER_DEFAULT_VAL_GENERATED_NON_PRIOR; SQLSTATE: HY000
Message: Default value expression of column ‘%s’ cannot refer to a column defined after it if that column is a generated column or has an expression as default value.
错误说明:
ER_DEFAULT_VAL_GENERATED_NON_PRIOR错误是MySQL服务器在处理查询时出现的一个错误状态码,是指在试图插入一个新记录或更新现有记录时,表中列是定义为自动生成(比如设置了 a TIMESTAMP列),而该查询中没有提供非默认值,导致MySQL不知道如何处理,进而导致该错误产生。
解决方法:
可以通过提供合理的值的方式来快速解决解决ER_DEFAULT_VAL_GENERATED_NON_PRIOR错误:
(1)如果是插入操作,提供非默认值来解决:
如果要插入一条记录,且涉及TIMESTAMP列,即使查询中要插入值为“NULL”,也必须指定非NULL的非默认值,比如提供一个CURRENT_TIMESTAMP作为替代。
(2)如果是更新操作,可以使用Timestamp on update current_timestamp来保留之前记录的值:
如果要更新一条记录,同时又需要涉及TIMESTAMP列,可以使用Timestamp on update current_timestamp这种语法来实现,这样会保留之前记录的值,从而解决ER_DEFAULT_VAL_GENERATED_NON_PRIOR错误。
一般来说,只要为涉及TIMESTAMP类型的列提供一个合理的值,我们就可以解决ER_DEFAULT_VAL_GENERATED_NON_PRIOR错误。