MySQL始终生成为..导入时出现虚拟语法错误



尝试将表从备份导入到另一台服务器并在SQL语法中出现错误

CREATE TABLE IF NOT EXISTS `book` (
`bid` bigint(20) NOT NULL AUTO_INCREMENT,
`bookdate` datetime NOT NULL,
`create_date` datetime NOT NULL,
`bookdate_date` date GENERATED ALWAYS AS (cast(`bookdate` as date)) VIRTUAL,
`create_date_date` date GENERATED ALWAYS AS (cast(`create_date` as date)) VIRTUAL,
PRIMARY KEY (`bid`),
KEY `IDX_book_bookdate_date` (`bookdate_date`),
KEY `IDX_book_create_date_date` (`create_date_date`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=316;

phpMyAminError

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GENERATED ALWAYS AS (cast(`bookdate` as date)) VIRTUAL,
`create_date_date` da' at line 5

如何修复导入错误?我不知道这是什么意思,它超出了我的工资等级

`bookdate_date` date GENERATED ALWAYS AS (cast(`bookdate` as date)) VIRTUAL,
`create_date_date` date GENERATED ALWAYS AS (cast(`create_date` as date)) VIRTUAL,

这些是生成的列。它们是自动设置的,因此您无法在insertupdate中分配值。 这些是在某些版本的MySQL 5.7中引入的,因此旧版本不支持它们。 您可以使用视图替换该想法,以获得类似的功能。

它们是在查询表时使用表达式计算的。 这很方便,因为值始终正确。VIRTUAL表示列值不存储在表中。

VIRTUAL的替代方案是STORED. 这将在插入或更新行时计算一次值。 它占用了存储空间,但如果计算成本高昂,则可能很方便。

编辑:

根据您的评论,您有问题。 一种方法是创建视图,但这可能很棘手。 假设现有代码引用列,最好的办法是将生成的列定义为常规列,并使用触发器(insertupdate(来设置它们。

最新更新