关系数据库标准语言SQL学习总结
1、数据库支持模式、表、视图和索引的创建(Create)、删除(Drop),但只支持表的修改(Alter)。
2、模式的定义、删除
create schema s1 authorization user1;
若没有定义模式名,则将用户名user1作为默认的模式名。模式就相当于命名空间,定义好之后就可以在模式下定义表、视图和索引了。在创建模式的时候可以同时创建表、视图和索引。
drop schema s1 <Cascade|Restrict>;
因为模式下建立了表、视图等,所以要考虑级联删除。
两者必选其一。3、表的建立、删除和修改
3.1 建立表
create table tname (
col1 int(10) not null primary,
col2 varchar(255);
col3 varchar(255) unique;
foreign key (col2) references table2(tId);
);
完整性约束条件存储在数据字典中。在某个模式下创建表,首先要指定模式,语句如下:
show search_path to schema1,public;然后创建表即可
3.2 修改表
alter table t1 add newcol int(10);
alter table t1 drop column col1;
alter table t2 add Unique(cname);
alter table t2 alter column col1 int(10);
3.3 删除表
drop table t1 [CASCADE|RESTRICT];
4、索引的创建、删除
系统在存取数据时会自动选择合适的索引作为存储路径,用户不必也不能显示地选择。索引包括唯一索引和聚簇索引,唯一索引是指每一个索引值都对应唯一的数据记录,聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织,对增删比较多的表不易建该索引,一个表只能建一个聚簇索引。
4.1 创建索引
create [UNIQUE|CLUSTER] index index1 on table1(col1 ASC,col2 DESC);
索引是保存在数据字典里的,有B+树索引和Hash索引,B+索引有较好的动态平衡,Hash索引查找速度比较快。具体采用哪种索引是RDBMS决定的。增删改较频繁时,维护索引开销比较大。
4.2 删除索引
drop index index1;
这里不用考虑级联,因为不会在索引上建立其他东西。
5、视图的建立和删除、查询、更新
视图细分有行列子集视图和带表达式的视图。
5.1 建立视图
视图是建立在基本表的虚表,它不包含数据,只有被调用的时候才会对它填充数据,
它的定义存储在数据字典中。create view view1(col1,col2,...) as
select c1,c2,...
from t1
where ...
with check option;
最后一句的作用是,当插入、删除和修改数据时会检查是否符合谓词条件。定义视图时可以不指定列名,但在下面三种情况下一定要指定列名:
①select 的目标列中含有表达式或者聚合函数
②目标列中有重名的情况
③需要重命名各列
5.2 删除视图
drop view view1 [CASCADE]
5.3 更新视图
并不是所以的视图都支持更新的,一般只支持行列子集视图可以更新,但不同的系统有不同的规定。因为有的视图更新不能唯一有意义的转换成为相应基本表的更新,如定义在AVG(cno)上的视图。
5.4 查询视图
视图消解,即将定义中的子查询和用户的查询结合起来,转化成对基本表的查询,然后再执行修正了查询。但是对于非行列子集视图的查询不能进行转化,就直接对基本表进行。
5.5 视图的好处
①简化了用户的操作,使用户将注意力只放在关心的数据上
②对于机密数据提高了安全性
③对同一数据从不同角度看待
④在一定程度上为重构数据库提供了逻辑独立性
⑤适当的视图可以更清楚的表达查询