mysql - 在 MySQL 中如何使用表达式生成列?
问题描述
现在我想创建一个包含学生分数的表。有四列:student_id
、homework_score
和。我想让final_score由一个表达式生成:Round(homework_score * 0.3 + final_score * 0.7)。以下是我的 SQL 脚本:exam_score
final_score
CREATE TABLE course (
student_id CHAR(8) NOT NULL,
homework_score INT NULL,
exam_score INT NULL,
final_score INT NULL DEFAULT Round((homework_score * 0.3 + exam_score * 0.7),0),
PRIMARY KEY (student_id))ENGINE = InnoDB;
当我尝试执行 SQL 时,MySQL 说DEFAULT Round((homework_score * 0.3 + exam_score * 0.7),0)
.
我是 MySQL 新手,我不知道我的 SQL 出了什么问题。如果有人可以帮助我,我将不胜感激。
解决方案
约束必须default
是常数。从 MySQL 5.7.? 开始,MySQL 支持生成的列。您可以将其表示为:
CREATE TABLE course (
student_id CHAR(8) NOT NULL,
homework_score INT NULL,
exam_score INT NULL,
final_score INT as ( Round((homework_score * 0.3 + exam_score * 0.7), 0) ),
PRIMARY KEY (student_id)
) ENGINE = InnoDB;
在早期版本中,您需要使用视图或触发器来生成值。
推荐阅读
- javascript - 未捕获的 ReferenceError:未在 geotiff.js:3 中定义导出
- r - R - dim(X) 在 R 中必须有一个正长度?
- php - AWS SES 自定义验证电子邮件重定向 URL 没有参数
- php - 从具有正确扩展名的文本响应生成图像
- c# - NLog - System.MethodAccessException 仅在 VMWare Horizon View 客户端中
- apache-spark - 关于 Spark 独立集群缓存内存问题的 Jupyter 笔记本
- scala - Spark UDAF 动态输入模式处理
- sql - 表中的多行具有来自另一个表的值
- java - 我们可以创建抽象类的对象吗?如果不是,为什么?
- google-apps-script - 如何让一个 URL 发送到三个 Google 表单 URL 之一?