针对学生-课程数据库,创建下列索引,给出语句及mysql的执行结果,索引创建不成功请分析原因。 ① 在Student表上创建按sage降序排列的索引idx_NON_Stusage; ② 在Student表上创建按sage降序排列的唯一性索引idx_UN_Stusage; ③ 在Course表上创建按Ccredit升序排列的唯一性索引idx_UN_Ccredit; ④ 在SC表上按Sno升序和Cno降序建立唯一索引idx_UN_SC。 ⑤ 删除上述建立的所有索引。
时间: 2023-07-14 15:12:24 浏览: 99
① 创建按sage降序排列的索引idx_NON_Stusage语句:
```sql
CREATE INDEX idx_NON_Stusage ON Student(sage DESC);
```
执行结果:成功创建索引。
② 创建按sage降序排列的唯一性索引idx_UN_Stusage语句:
```sql
CREATE UNIQUE INDEX idx_UN_Stusage ON Student(sage DESC);
```
执行结果:创建索引失败,因为Student表中可能存在相同年龄的学生。
③ 创建按Ccredit升序排列的唯一性索引idx_UN_Ccredit语句:
```sql
CREATE UNIQUE INDEX idx_UN_Ccredit ON Course(Ccredit ASC);
```
执行结果:成功创建索引。
④ 在SC表上按Sno升序和Cno降序建立唯一索引idx_UN_SC语句:
```sql
CREATE UNIQUE INDEX idx_UN_SC ON SC(Sno ASC, Cno DESC);
```
执行结果:成功创建索引。
⑤ 删除上述建立的所有索引语句:
```sql
DROP INDEX idx_NON_Stusage ON Student;
DROP INDEX idx_UN_Stusage ON Student;
DROP INDEX idx_UN_Ccredit ON Course;
DROP INDEX idx_UN_SC ON SC;
```
执行结果:成功删除索引。
相关问题
mysql数据库创建学生成绩
### 创建学生成绩表结构
为了创建一个用于存储学生成绩的 MySQL 数据库,需要定义成绩表与其他相关表格的关系。以下是具体实现方法:
#### 定义基本表结构
首先,在 `CREATE TABLE` 语句中指定必要的字段及其数据类型。考虑到成绩记录通常涉及学生的个人信息、课程详情以及分数等内容,建议至少包含以下列:
- 学号 (`student_id`)
- 姓名 (`name`)
- 科目名称 (`subject_name`)
- 成绩 (`score`)
- 考试日期 (`exam_date`)
```sql
CREATE DATABASE IF NOT EXISTS school_db;
USE school_db;
CREATE TABLE student_scores (
id INT AUTO_INCREMENT PRIMARY KEY,
student_id VARCHAR(20),
name VARCHAR(50),
subject_name VARCHAR(100),
score DECIMAL(5, 2), -- 支持两位小数的成绩
exam_date DATE,
INDEX idx_student (student_id), -- 对于频繁查询的学生ID建立索引
FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE
);
```
此代码片段展示了如何设置成绩表并为其添加适当的数据约束条件[^1]。
#### 表间关系设计
当涉及到多个实体间的联系时,比如学生属于某个特定年级或班级,则可以通过引入额外的外键来加强这些关联。例如,如果存在独立的 `students`, `classes` 和 `departments` 表格,那么可以在 `student_scores` 中加入相应的外键引用以保持一致性[^2]。
```sql
ALTER TABLE student_scores ADD COLUMN class_id INT;
ALTER TABLE student_scores ADD CONSTRAINT fk_class
FOREIGN KEY (class_id) REFERENCES classes(class_id);
ALTER TABLE student_scores ADD COLUMN department_id INT;
ALTER TABLE student_scores ADD CONSTRAINT fk_department
FOREIGN KEY (department_id) REFERENCES departments(department_id);
```
通过这种方式不仅能够维护良好的数据库规范化标准,而且有助于提高后续操作效率,如联接查询等场景下的表现。
使用mysql语句写出 8, 查询学生表中性别为 “女”、所在城市为“株洲”的学生姓名、出生日期。 9, 查询出生年份在1992年的学生姓名、性别、所在城市。 10. 查询所有学生分布的城市。 11, 查询《数据库应用技术》课程成绩大于等于80,小于等于90的学生学号、姓名。 12, 查询所有学生的选课信息,包括学号、姓名、性别、课程名、成绩。 13、查询《java編程》这门课最高分学生的学号、姓名。 14.统计每个学生的平均分,统计结果包括学号、平均成绩。 15, 查询课程平均分数大于80分的课程名称及课程平均分。 16, 统计每门课程的选课人数,統计结果包括课程名、人数。 17、在学生信息表的姓名列上建立普通索引。 18、查询所有学生学号,姓名,年龄(使用year函数)。 19. 创建视图,包含数据应用技术成績大于80分学生的学号、姓名、出生日期。 20. 删除课程号为03的课程信息。
8. SELECT name, birthdate FROM student WHERE gender='女' AND city='株洲';
9. SELECT name, gender, city FROM student WHERE YEAR(birthdate)=1992;
10. SELECT DISTINCT city FROM student;
11. SELECT student_id, name FROM score JOIN student ON score.student_id=student.id WHERE course_name='数据库应用技术' AND score>=80 AND score<=90;
12. SELECT student.id, student.name, student.gender, course.course_name, score.score FROM student JOIN score ON student.id=score.student_id JOIN course ON score.course_id=course.id;
13. SELECT student_id, student.name FROM score JOIN student ON score.student_id=student.id WHERE course_name='java編程' AND score=(SELECT MAX(score) FROM score WHERE course_name='java編程');
14. SELECT student_id, AVG(score) AS avg_score FROM score GROUP BY student_id;
15. SELECT course.course_name, AVG(score.score) AS avg_score FROM score JOIN course ON score.course_id=course.id GROUP BY course.course_name HAVING avg_score>80;
16. SELECT course.course_name, COUNT(DISTINCT student_id) AS num_students FROM score JOIN course ON score.course_id=course.id GROUP BY course.course_name;
17. CREATE INDEX idx_name ON student(name);
18. SELECT student.id, student.name, YEAR(NOW())-YEAR(student.birthdate) AS age FROM student;
19. CREATE VIEW view_good_scores AS SELECT student.id, student.name, student.birthdate FROM student JOIN score ON student.id=score.student_id WHERE score>=80 AND course_name='数据库应用技术';
20. DELETE FROM course WHERE course_id='03';
阅读全文