首页 > 解决方案 > 在 MySQL 中如何使用表达式生成列?

问题描述

现在我想创建一个包含学生分数的表。有四列:student_idhomework_score和。我想让final_score由一个表达式生成:Round(homework_score * 0.3 + final_score * 0.7)。以下是我的 SQL 脚本:exam_scorefinal_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 出了什么问题。如果有人可以帮助我,我将不胜感激。

标签: mysqlsql

解决方案


约束必须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;

在早期版本中,您需要使用视图或触发器来生成值。


推荐阅读