这是代码
CREATE TABLE `church` (
`ID` int(10) UNSIGNED NOT NULL,
`StudentID` int(11) NOT NULL,
`semesterID` int(11) NOT NULL,
`attendedWed` int(11) NOT NULL,
`attendedFri` int(11) NOT NULL,
`attendedSabM` int(11) NOT NULL,
`attendedSabE` int(11) NOT NULL,
`ChurchScore` double(10,2) GENERATED ALWAYS AS ((((((`attendedWed` + `attendedFri`) + `attendedSabM`) + `attendedSabE`) * 100) / 60)) STORED
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
这是错误
操作失败:将SQL脚本应用于 数据库。执行中:ALTER TABLE
citizenshipgroup3
。church
更改列ChurchScore
ChurchScore
DOUBLE(10,2)NULL DEFAULTattendedWed
;错误1064:您的SQL语法有错误;查看手册 对应于您的MariaDB服务器版本的正确语法 在第2行SQL语句:ALTER TABLE的'
attendedWed
'附近使用citizenshipgroup3
。church
更改列ChurchScore
ChurchScore
DOUBLE(10,2)NULL DEFAULTattendedWed
答案 0 :(得分:0)
您的语法很好。问题是MySQL直到5.7才支持生成的列。您大概正在使用早期版本。
可能最简单的解决方案是使用视图进行计算。
答案 1 :(得分:0)
当您尝试修改列ALTER TABLE
并将ChurchScore
的值设置为涉及另一个列DEFAULT
的表达式时,错误将在attendedWed
出现。 / p>
此外,您的错误消息似乎源自MariaDB,而不是MySQL。
从MariaDB 10.2.1起,您可以在DEFAULT中使用大多数功能。表达方式 应该在它们周围加上括号。如果您使用不确定性 DEFAULT中的函数,则将复制到表的所有插入 在行模式下。您甚至可以参考DEFAULT中的前几列 表达式:
CREATE TABLE t1 (a int DEFAULT (1+1), b int DEFAULT (a+1)); CREATE TABLE t2 (a bigint primary key DEFAULT UUID_SHORT());
因此,您需要确保以下几点:
DEFAULT
子句中指定的表达式周围使用括号。因此ALTER TABLE
语句如下:
ALTER TABLE `citizenshipgroup3`.`church`
CHANGE COLUMN `ChurchScore` `ChurchScore` DOUBLE(10,2) NULL
DEFAULT (attendedWed) ;