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