觉得不能刻板的记笔记,还是直接先听课,然后记录关键的信息,具体可查看MOOC上的课程。
第3章 关系数据库标准语言SQL
本门课程主要实验环境:Oracle 11g和PL/SQL Developer
课程中主要讲解的是Oracle中的SQL语言;
所有例题中用到的截图来自Oracle 11g
课程中主要用到的3个关系(也就是表):
s(sno, sname, ssex, sbirth, college) 学生表(学号,姓名,性别,出生日期,学院)
c(cno, name, cpno, ccredit) 课程表(编号,名称,先修课编号,学分)
sc(sno, cno, grade) 学生选课表(学生学号,所选课程,成绩)
3.2 数据定义
1.创建基本表
create table<表名>
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]]
…
[,<表记完整性约束条件>]);[]中内容表示可有可无。
Oracle中常用的数据类型
char
固定长度字符型,最大存放2000个字符;不够数目的以0填充。例char(5)中的“00003”要和后面的number区分,这些"数字"不是用来运算的。
varchar2
可变长度的字符型,最多存放4000个字符。varchar(10),输入为"002",不会填充至10个字符,但是输入内容不能超过10个字符;
number
所有的数值型,格式为number(p, s),其中p表示总位数,s表示小数的位数,p最大为38;
data
存放日期的时间类型,用7个字节分别描述年、月、日、时、分、秒。
常用的完整性约束
实体完整性约束:PRIMARY KEY,主键(主码)
参照完整性约束:FOREIGN KEY
用户自定义的完整性约束:
check约束,针对取值范围的约束
唯一性约束:unique
非空值约束:not null
这里再学习一下主码和外码的概念。
主码:每一个表都要有主码或者主键,主码的取值不能重复,不能为空,可以将每一个元组区分开;
外码:一个关系中属性列的取值需要参照另外一个关系的取值,那么这个属性列就叫做外码或者外键。
注意以上内容其实是一条语句,为了方便采用分行写。
注意对比两个例题。
2. 修改基本表
alter table <表名>
[add<新列名><数据类型>[完整性约束]]
[add<表级完整性约束>]
[drop column <列名>]
[drop constraint [完整性约束]]
[modify<列名><数据类型>] 修改某个数据列的类型
我有疑问的是为什么不加圆括号,是因为只进行一次修改的原因吗?!
其中的列名sys_c0014884在表中可查询到。
3. 删除基本表
drop table <表名>
删除二维表后,表中的数值,约束条件等都会消失。
3.2.2 索引
1.什么是索引
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构;
它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
建立索引是加快查询速度的有效手段。
DBMS自动完成索引的维护,因为二维表是可变的。
DBMS自动选择是否使用索引以及使用哪些索引。
因此对我们用户来说,只要创建索引即可。
但是也并不是说索引建的越多越好。
建立索引的考虑
索引为性能所带来的好处是有代价的,因为索引在数据库中会占用一定的存储空间;
在对数据进行插入、更改和删除操作时,需要对索引进行维护,这需要花费额外的时间。
在设计和创建索引时,应确保对性能的提高程度大于在存储空间和处理资源方面的代价。
2. 建立索引
创建索引的方法可以分为直接方法和间接方法。
create [unique | bitmap] index <索引名> on <表名>(<列名>[<次序>][, <列名>[<次序>]]…);次序默认为升序asc(ascent),降序为desc(descent)
3. 修改索引
只能修改索引的名称
alter index <旧索引名> rename to <新索引名>;
4. 删除索引
drop index <索引名>;