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

tuwxkamq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(370)

试图将表从备份导入到另一台服务器,但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,
ac1kyiln

ac1kyiln1#

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

相关问题