MySQL索引和视图练习

题目:

学生表:Student (Sno, Sname, Ssex , Sage, Sdept)
学号,姓名,性别,年龄,所在系 Sno为主键
课程表:Course (Cno, Cname,)
课程号,课程名 Cno为主键
学生选课表:SC (Sno, Cno, Score)
学号,课程号,成绩 Sno,Cno为主键

1.用SQL语句创建学生表student,定义主键,姓名不能重名,性别只能输入男或女,所在系的默认值是 “计算机”。
2.修改student 表中年龄(age)字段属性,数据类型由int 改变为smallint。
3.为SC表建立按学号(sno)和课程号(cno)组合的升序的主键索引,索引名为SC_INDEX 。
4.创建一视图 stu_info,查询全体学生的姓名,性别,课程名,成绩。

1、创建学生表Student,定义主键,姓名唯一,性别限制,系默认值为“计算机”。

CREATE TABLE Student (
    Sno INT PRIMARY KEY,
    Sname VARCHAR(20) NOT NULL UNIQUE,
    Ssex ENUM('男', '女') NOT NULL DEFAULT '男',
    Sage INT,
    Sdept VARCHAR(20) DEFAULT '计算机'
);

这里使用了ENUM类型来限制性别只能输入'男'或'女',Sname设为UNIQUE确保姓名不重复,Sdept设了默认值为'计算机'。

2、修改student 表中年龄(age)字段属性,数据类型由int变为smallint。

由于SQL标准不直接支持直接修改字段类型的同时改变大小(特别是从大改小),通常的做法是新增一个字段,迁移数据,再删除旧字段。但小型整型(SMALLINT)在多数系统中已经足够存放年龄,且与INT差别不大,如果原表数据量不大或允许暂时锁表操作,可以考虑直接操作,但需谨慎。这里提供一般推荐的较为安全的做法:

ALTER TABLE Student
ADD COLUMN Sage_new SMALLINT;

UPDATE Student SET Sage_new = Sage;

ALTER TABLE Student DROP COLUMN Sage;

ALTER TABLE Student RENAME COLUMN Sage_new TO Sage;

请根据实际情况和数据库管理系统(如MySQL、PostgreSQL等)的具体支持情况调整上述脚本,因为不是所有数据库都支持直接rename column操作。

3、为SC表建立组合主键索引

ALTER TABLE SC
ADD CONSTRAINT SC_INDEX PRIMARY KEY (Sno, Cno);

这里创建了一个名为SC_INDEX的复合主键,由Sno和Cno组成。

4、创建视图stu_info,查询全体学生的姓名,性别,课程名,成绩。

CREATE VIEW stu_info AS
SELECT S.Sname, S.sex, C.Cname, SC.Score
FROM Student S
JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno;

这样,stu_info视图就被创建了,它可以展示学生的姓名、性别、所选课程名及其对应的成绩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍妍的宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值