CREATE TABLE `revenue_daily` ( `wallet` varbinary(100) NOT NULL DEFAULT '0',
`tc_access` varbinary(100) NOT NULL DEFAULT '0',
`tc_short` varbinary(100) NOT NULL DEFAULT '0',
`total_toll_collection` varbinary(100) GENERATED ALWAYS AS (`wallet` + `tc_access`) VIRTUAL NOT NULL,
`cash_collection` varbinary(100) GENERATED ALWAYS AS (`total_toll_collection` - `tc_short`) VIRTUAL NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=ascii;
该表已生成column.I使用数据备份数据库结构,当我恢复相同的.sql文件时,则会发生错误。 错误是: -
ERROR 3105 (HY000) at line 262: The value specified for generated column 'total_toll_collection' in table 'revenue_daily' is not allowed.
我使用的是mysql版本: -
sunilp@sunilp ~> mysql --version
mysql: [Warning] World-writable config file '/etc/mysql/mysql.conf.d mysqld.cnf' is ignored.
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
答案 0 :(得分:1)
当使用来自 MariaDB 的 mysqldump 和虚拟生成列时,这是一个问题。
MariaDB 的 mysqldump 显然转储了生成的值,但 MySQL 只接受 DEFAULT
作为虚拟生成列的值。
看来您需要使用 MySQL 的 mysqldump 来正确转储和恢复 MySQL 服务器上的虚拟生成列。
也报告了错误 here。
我的解决方法是替换转储中的虚拟列:
sed -i 's/GENERATED ALWAYS AS .* VIRTUAL/NOT NULL/' mydump.sql
然后恢复转储,然后再次删除/添加生成的列:
mysql -e "ALTER TABLE foo DROP COLUMN bar;\
ALTER TABLE foo ADD COLUMN bar VARCHAR(255) AS ...;"
我也发布了这个答案 here。
答案 1 :(得分:0)
我在使用 adminer (https://www.adminer.org/) 从 mariadb 转储它时遇到了同样的问题
就我而言,我使用 phpmyadmin 进行转储解决了这个问题。它对我有用。
我不知道原因,但管理员转储了生成的值列。不应该,因为应该在插入行时生成该值。
我没有尝试从命令行使用 mysqldump 时会发生什么...