索引、元组插入和基本查询 3.23数据库课程作业

第四周第二节数据库课程,主要学习了索引、索引的建立和删除、元组的插入以及对表做一些基本查询

以下演示的内容依据三张表,Student、Course、SC(学生表、课程信息表、学生选课表)

create table Student(
	Sno varchar(20) primary key, --主码
	Sname varchar(20) unique, --值互不相同
	Ssex varchar(2),
	Sage smallint,
	Sdept varchar(20)
); --建立学生表
create table Course(
	Cno varchar(4) primary key, --主码
	Cname varchar(40) not null, --不能取空值
	Cpno varchar(4), --表示先行课程
	Ccredit smallint,
	foreign key(Cpno) references Course(Cno) --自身与自身参照,Cpno是外码(确保先行课程是存在的)
); --建立课程表
create table SC(
	Sno varchar(20),
	Cno varchar(4),
	Grade smallint,
	primary key(Sno,Cno), --主属性包含两个属性
	foreign key(Sno) references Student(Sno), --Sno是外码,被参照表为Student表,数据类型需相同
	foreign key(Cno) references Course(Cno) --Cno是外码,被参照表为Course表
	/*确保选课的学号真实存在,所选的课真实存在*/
); --建立选课表

1、索引的建立、修改和删除

建立索引的目的是加速查询速度,这便涉及到了上学期数据结构课程讲的一章——查找,里面学到的散列、B树等均可作为数据库索引的底层数据结构

索引的类型有两种,unique(一个索引值对应唯一的数据记录)和cluster(聚簇索引)

/* create 类型 index 索引名 on 表名(属性名) */
create unique index Stuson on Student(Sno); --建立唯一对应的索引
create unique index SCno on SC(Sno asc,Cno desc); --按照Sno升序,Sno相同时按Cno降序

修改索引时,标准SQL与T-SQL语法不同

-- alter index Scno on SC rename to Scsno; --标准的不支持
exec sp_rename 'SC.SCno','SCSno','index'; --T-SQL
drop index Stuson on Student; --删除索引

经上述操作后,结果如下


2、数据的插入

为表插入元组时,可指定插入属性的顺序,插入数据不能违反关系的完整性

insert into Student values('20191102041','王伯成','男','20','计算机科学与技术'); --按表中属性本身的顺序输入

insert into Student(Sname,Sno,Ssex,Sage) 
values('张三','2001','男','21'); --指定输入属性的顺序,未指定的置为NULL(若不违反用户定义的完整性)

/*insert into Student(Sname,Sno,Ssex,Sage) 
values('李五','2001','男','20'); */ --主码对应元组唯一,两个2001

insert into Student values
('2000','王五','男',22,'信息安全'),
('2002','马六','男',20,'软件工程'),
('2003','陈一','女',21,'网络工程'); --可一次插入多条

为涉及参照关系的表插入元组时,需要遵守参照完整性规则

如下为向Course表插入元组,该表的Cpno属性为外码,与自身的Cno属性对应,即自己参照自己

-- insert into Course values('2','数据结构','1',4); --违反参照完整性(Cno为1的课还不存在)
insert into Course values('1','程序设计',null,4); --先插入1
insert into Course values('2','数据结构','1',4);

3、基本的查询

查询执行了上述插入后的Student整张表

select * from Student; --*代表查询所有属性

指定查询属性列

select Sno,Sname from Student; --指定查询的属性

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值