已知选课管理系统Xkglxt包含如下数据表: 1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写 2)课程表: 课程id, 课程名称, 学分 3)选课表: 选课id, 学生id, 课程id, 成绩 请完成如下操作的SQL语句,表名和列名必须和上面的一致: 1、创建以上三个表的SQL语句; 2、创建一个存储过程(名字自定),实现选课表的插入,需要判断当前课程id和学生id是否存在。
时间: 2023-06-09 09:02:35 浏览: 119
C/C++学生成绩管理系统
5星 · 资源好评率100%
1、创建表的SQL语句如下:
-- 学生表
CREATE TABLE 学生表 (
学生id INT PRIMARY KEY AUTO_INCREMENT,
学号 VARCHAR(20) NOT NULL,
姓名 VARCHAR(20) NOT NULL,
专业 VARCHAR(20) NOT NULL,
年级 VARCHAR(4) NOT NULL,
姓名拼音缩写 VARCHAR(20) NOT NULL
);
-- 课程表
CREATE TABLE 课程表 (
课程id INT PRIMARY KEY AUTO_INCREMENT,
课程名称 VARCHAR(20) NOT NULL,
学分 FLOAT NOT NULL
);
-- 选课表
CREATE TABLE 选课表 (
选课id INT PRIMARY KEY AUTO_INCREMENT,
学生id INT NOT NULL,
课程id INT NOT NULL,
成绩 FLOAT,
CONSTRAINT FOREIGN KEY (学生id) REFERENCES 学生表(学生id),
CONSTRAINT FOREIGN KEY (课程id) REFERENCES 课程表(课程id)
);
2、创建存储过程的SQL语句如下:
DELIMITER //
CREATE PROCEDURE insert_course(
IN pid INT,
IN sid INT,
IN sc FLOAT
)
BEGIN
DECLARE count_1 INT;
DECLARE count_2 INT;
SELECT COUNT(*) INTO count_1 FROM 学生表 WHERE 学生id = sid;
SELECT COUNT(*) INTO count_2 FROM 课程表 WHERE 课程id = pid;
IF count_1 = 0 THEN
SELECT "学生不存在" AS MESSAGE;
ELSEIF count_2 = 0 THEN
SELECT "课程不存在" AS MESSAGE;
ELSE
INSERT INTO 选课表 (学生id, 课程id, 成绩) VALUES (sid, pid, sc);
SELECT "选课成功" AS MESSAGE;
END IF;
END//
DELIMITER ;
说明:此存储过程的功能是向选课表中插入数据,但在插入之前需要进行学生id和课程id的验证,以确保学生和课程都是存在的。如果存在,则插入数据,否则返回错误信息。
阅读全文