数据库作业3(续)

Ⅰ 索引的建立与删除

1.建立索引

SQL语言建立索引的格式如下:

CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>] [,<列名> [<次序>]]);

排列次序:(默认为升序)

ASC升序
DESC降序

索引的类型:

UNIQUE此索引的每一个索引值只对应唯一的数据记录
CLUSTER聚簇索引

【例3.13】为学生-课程数据库中的Student、Course和SC三个表建立索引。

create unique index Stusno on Student(Sno);--按学号升序唯一索引
create unique index Coucno on Course(Cno);--按课程号升序唯一索引
create unique index SCno on SC(Sno asc,Cno desc);--学号升序,课程号降序唯一索引

在这里插入图片描述

2.修改索引

SQL 修改索引语句的一般格式:

ALTER INDEX <旧索引名> RENAME TO <新索引名>;

【例3.14】将SC表的SCno索引名改为SCSno。

alter index SCno rename to SCSno;

此时会出现错误:
在这里插入图片描述
因为T-SQL与标准SQl修改索引的语句不同,T-SQL修改索引的语句为:

exec sp_rename 'SC.SCno','SCSno','index';

在这里插入图片描述

来自博客:https://blog.csdn.net/qq_24188927/article/details/82895394

3.删除索引

SQL删除索引的语句:

DROP INDEX <索引名>;

T-SQ删除索引的语句为:(示例)

DROP INDEX IX_ProductVendor_BusinessEntityID   
    ON Purchasing.ProductVendor;  
GO

【例3.15】删除Student表的Stusno索引。

drop index Stusno on Student;

在这里插入图片描述

删除索引时,系统会同时从数据字典中删去有关改索引的描述。

Ⅱ 数据插入

SQL 的数据插入方式有两种,一种是插入一个元组,令一种是插入子查询结果。后者可以一次性插入多个元组。先来说第一种插入方式吧。
插入语句格式为:

INSERT 
INTO <表名> [(<属性列1> [,<属性列2>]...)]
VALUES (<常量1> [,<常量2>]...);

【例3.69】将一个新学生元组插入到Student表中。

insert 
into Student (Sno,Sname,Ssex,Sdept,Sage)
values ('201215128','陈冬','男','IS',18);

在这里插入图片描述
注:在第二行的属性列中可以看到次序与截图表格中的次序是不同的,这就说明输入时的次序可以与表的次序有异,但属性列与常量必须一 一对应,即属性列1与常量1对应。
a.此种插入方式“into”后面指出了属性列,没有出现的属性列,新元组在这些列上取空值NULL,定义表时说明了NOT NULL的属性列是不能取空值的。
【例3.70】将学生张成民的信息插入到Student表中。

insert 
into Student
values('201215126','张成民','男',18,'CS');

插入后的结果为:
在这里插入图片描述
b.这是因为into句子中只指出了表名,没有指出属性名,此时values子句对新元组的各属性列赋值一定要注意与属性列要一一对应。我的属性列里有S_entrance,但values中没有它的值,就会报错。删除S_entrance后成功插入数据:
在这里插入图片描述
或者在values语句中补上S-entrance对应的常量:

insert 
into Student
values('201215127','张成民1','男',18,'CS','2019.09.01');

在这里插入图片描述
【例3.71】插入一条选课记录。

insert 
into SC(Sno,Cno)
values('201215128','1');

在这里插入图片描述
c. 因为Snow,Cno是表SC的外码,此时的Course表还未添加数据,根据参照完整性规则是会出现错误的。
Course填入数据后:

insert 
into SC(Sno,Cno)
values('201215128','1');
select * from SC;

在这里插入图片描述

Ⅲ 数据查询

1单表查询

(1)查询指定列:
在目标列表达式中输入要查询的列名即可,各列的先后顺序可与表中的顺序不同。
【3.16】查询全体学生的学号与姓名:(在此就不介绍3.17了)

select Sno,Sname
from Student;

在这里插入图片描述

(2)查询全部列:
有两种方法:
a. 在SELECT关键字后列出所有列名;
b. (列的显示顺序与在基表中的顺序相同)可将<目标列表达式>指定为 *。
【例3.18】查询全体学生的详细记录。

select *
from Student;

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值