试图将表从备份导入到另一台服务器,但在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,
这些是生成的列。 它们是自动设置的,因此不能在插入
或更新
中赋值。 这些是在MySQL5.7的某个版本中引入的,因此旧版本不支持它们。 您可以使用视图来替换这个想法,以获得类似的功能。
它们是在查询表时计算的--使用表达式。 这很方便,因为值总是正确的。 virtual
表示列值不存储在表中。
虚拟
的替代方案是存储
。 它在插入或更新行时计算值一次。 它会耗尽存储空间,但如果计算成本很高,它会很方便。
编辑:
根据你的评论,你有问题。 一种方法是创建一个视图,但这可能很棘手。 假设现有代码正在引用这些列,则最好将生成的列定义为常规列,并使用触发器(insert
和update
)来设置它们。