这是密码
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
双精度(10,2)空默认值 attendedWed
;
错误1064:您的sql语法有错误;查看与您的mariadb服务器版本相对应的手册,以获取正确的语法 attendedWed
'第2行sql语句:alter table citizenshipgroup3
. church
更改列
ChurchScore ChurchScore
双精度(10,2)空默认值 attendedWed
2条答案
按热度按时间uttx8gqw1#
你的语法很好。问题是mysql直到5.7才支持生成的列。您可能正在使用早期版本。
可能最简单的解决方案是使用视图进行计算。
bpsygsoo2#
错误出现在
ALTER TABLE
,当您试图修改列时ChurchScore
设置DEFAULT
包含另一列的表达式的值attendedWed
.另外,您的错误消息似乎来自mariadb,而不是mysql。
来自mariadb文件:
在mariadb 10.2.1中,您可以默认使用大多数函数。表达式周围应该有括号。如果在默认情况下使用非确定性函数,则表中的所有插入都将以行模式复制。您甚至可以在默认表达式中引用前面的列:
因此,您需要确保以下几点:
升级mariadb版本至10.2.1及更高版本。最好升级到最新版本(现在是10.3+)。
需要在中指定的表达式周围使用括号
DEFAULT
条款。所以
ALTER TABLE
声明如下: