视图stu_score依赖于源表student、course和score三张表,包括studentno、sname、phone、cname、final五个字段,通过视图stu_score修改基本表student中的学号为19112100072的电话号码为‘15011112222’
时间: 2024-11-19 17:37:41 浏览: 0
视图`stu_score`依赖于`student`, `course`, 和 `score` 三个基础表,用于整合学生的姓名、学号、联系方式等信息以及成绩。如果想通过这个视图修改`student`表中特定学生的信息,比如将学号为19112100072的学生电话改为'15011112222',虽然视图本身不具备直接更新基础表的能力,但是可以通过以下步骤:
1. 首先确定在视图`stu_score`中,是否有包含学生学号(studentno)和电话(phone)的记录,并且学号确实对应到你想修改的学生。
2. 然后在`student`表中找到对应的记录,一般情况下你需要先通过其他字段(如`sname`或`studentno`)查询到正确的行。
3. 使用SQL的UPDATE命令,结合JOIN操作来更新`student`表的数据,例如:
```sql
UPDATE student AS s
SET s.phone = '15011112222'
FROM stu_score AS sc
WHERE sc.studentno = '19112100072'
AND s.studentno = sc.studentno;
```
这里假设`studentno`是主键,如果没有冲突,这将会成功更新`student`表的电话号码。
注意,由于视图只是一个虚拟表,不保存数据,所以这个操作实际上是在`student`表上进行的,而不是在视图`stu_score`上。
相关问题
DELIMITER $$ CREATE PROCEDURE set_stu_score ( IN stu_id VARCHAR(20), IN course_id VARCHAR(20), IN score DECIMAL(5,2) ) BEGIN UPDATE choose SET score = score WHERE student_id = stu_id AND course_id = course_id; END $$ DELIMITER ; -- 执行存储过程 CALL set_stu_score('201810101101', '1001', 90);
您的代码几乎正确,但是有一个小错误:在UPDATE语句中,score = score并没有改变原有的score值,需要将它改成score = @score。另外,存储过程中的table名字是choose,而不是student_course,如果您的数据库中不存在choose表,需要将表名改成您的表名。
以下是经过修改后的代码:
```sql
DELIMITER $$
CREATE PROCEDURE set_stu_score (
IN stu_id VARCHAR(20),
IN course_id VARCHAR(20),
IN score DECIMAL(5,2)
)
BEGIN
UPDATE choose
SET score = @score
WHERE student_id = stu_id AND course_id = course_id;
END $$
DELIMITER ;
-- 执行存储过程
CALL set_stu_score('201810101101', '1001', 90);
```
注意,我们在存储过程中使用了参数@score来更新成绩,参数名字与传入的参数score不一样,这是因为参数名字和列名字相同会导致歧义。同时,我们在调用存储过程时,需要使用CALL命令。如果您的存储过程执行成功,会返回一个"Query OK"的提示信息。
1. 为student表的phone列上建立一个降序普通索引phone_idx。 2. 在score表的s_no和c_no列上建立一个复合索引stu_cour_idx。 3. 在course表的c_name,t_no列上建立一个唯一性索引 cname_idx。 4. 删除teacher表的mark索引。 5. 利用alter table语句删除course表的cname_idx索引。 6. 在student表和score表上创建一个名为stu_score的视图。视图中保留18级的女生的学号、姓名、电话、课程号和结业成绩。
好的,我已经记录下了您的问题。以下是对每个问题的回答:
1. 为student表的phone列上建立一个降序普通索引phone_idx:
```
CREATE INDEX phone_idx ON student(phone DESC);
```
2. 在score表的s_no和c_no列上建立一个复合索引stu_cour_idx:
```
CREATE INDEX stu_cour_idx ON score(s_no, c_no);
```
3. 在course表的c_name,t_no列上建立一个唯一性索引cname_idx:
```
CREATE UNIQUE INDEX cname_idx ON course(c_name, t_no);
```
4. 删除teacher表的mark索引:
```
DROP INDEX mark ON teacher;
```
5. 利用alter table语句删除course表的cname_idx索引:
```
ALTER TABLE course DROP INDEX cname_idx;
```
6. 在student表和score表上创建一个名为stu_score的视图。视图中保留18级的女生的学号、姓名、电话、课程号和结业成绩:
```
CREATE VIEW stu_score AS
SELECT s.s_no, s.s_name, s.phone, sc.c_no, sc.score
FROM student s, score sc
WHERE s.s_no = sc.s_no AND s.s_no LIKE '18%' AND s.gender = '女';
```
阅读全文