数据库整理(三) SQL基础
SQL语言的特点
集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。
可以独立完成数据库生命周期中的全部活动:
●定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库。
●对数据库中的数据进行查询和更新
●数据库重构和维护。
●数据库安全性、完整性控制,以及事务控制。
●嵌入式SQL和动态SQL定义
1.用户在数据库系统投入运行后还可根据需要随时地、逐步地修改模式,并不影响数据库的运行,系统具有良好的可扩展性
2.在关系模型中实体和实体间的联系均用关系表示,这种数据结构的单一性带来了数据操作符的统一性,查找、插入、删除、更新等每一种操作都只需一种操作符,从而克服了非关系系统由于信息表示方式的多样性带来的操作复杂性。
3.“过程化”语言完成某项请求必须指定存取路径。SQL进行数据操作时,只要提出“做什么”,而无须指明“怎么做”,因此无须了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。减轻了用户负担,而且有利于提高数据独立性。
4.面向集合的操作方式非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。例如查询所有平均成绩在80分以上的学生姓名,用户必须一条一条地把满足条件的学生记录找出来(通常要说明具体处理过程,即按照哪条路径,如何循环等)。而SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合
5.SQL既是独立的语言,又是嵌入式语言。SQL语句能够嵌入到高级语言(例如C、C++、Java)程序中,供程序员设计程序时使用。
SQL三级结构
支持SQL的关系数据库管理系统同样支持关系数据库三级模式结构。其中外模式包括若干视图(view)和部分基本表( base table),数据库模式包括若干基本表,内模式包括若干存储文件( stored file)。
用户可以用SQL对基本表和视图进行查询或其他操作,基本表和视图一样,都是关系基本表是本身独立存在的表,在关系数据库管理系统中一个关系就对应一个基本表。
一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构对最终用户是隐蔽的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。
数据定义
一个关系数据库管理系统的实例( Instance)中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
SQL还可以定义:用户、触发器、过程与函数等
关于模式与数据库用户区别的理解
什么是User,什么是Database,什么是Schema,什么是Table,什么是列,什么是行?
可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table就被放入每个房间中,不能放置在房间之外。然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样。所以Schema包含的是Object,而不是User
User是每个对应数据库的主人,既然有操作数据库的权利,就肯定有操作数据库中每个Schema(房间)的权利。换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的,他有完全的操作权,。我们还可以给其他User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了
默认情况下一个用户对应一个集合,用户的schema名等于用户名,并作为该用户缺省schema。所以schema集合看上去像用户名。访问一个表时,如果没有指明该表属于哪个schema,系统会自动加上缺省的schema。一个对象的完整名称为schema.object,而不属user.object
在MySQL中创建一个Schema和创建一个Database的效果好像是一样的,但是在SQL Server和Oracle数据库中效果又是不同的。
在SQL Server中,假如我们在某一数据库中创建了用户Bosco,那么此时后台也为我们默认的创建了schema【Bosco】,schema的名字和user的名字相同。
模式与表
create table A时,如果没有特定的Schema做前缀,这个A表创建在了哪个Schema上,即进入了哪个房间?答案是:
如果当前操作数据库的用户有默认的Schema(在创建用户的时候指定了),那么表A被创建在了默认的Schema上。
如果当前操作数据库的用户没有默认的Schema(即在创建User的时候默认为空),那么表A被创建在了dbo Schema上, dbo房间(schema)好比一个大的公共房间,在当前登录用户没有默认schema的前提下,如果你在大仓库中进行一些操作,比如create table,如果没有制定特定的房间(schema),那么你的物品就只好放进公共的dbo房间(schema)了。
如果在创建表A的时候指定了特定的Schema做前缀,则表A被创建在了指定的 Schema上。
当定义基本表时一般可以有三种方法定义它所属的模式:
(定义一个学生一课程模式ST,现在要在ST中定义 Student、 Course、SC等基本表)
方法一:在表名中明显地给出模式名。
CREATE TABLE "S-T". Student(···)/*Student所属的模式是S-T*/
方法二,在创建模式语句中同时创建表。
方法三,设置所属的模式,这样在创建表时表名中不必给出模式名
模式创建的作用
例如你的数据库里面有很多的表。就以一个学校作为例子吧:
有很多表分别用于存储学生、课程、成绩、学分等信息。还有很多表用于存储 老师、工资、奖金等信息。如果这么多的表,都混杂在一起。管理起来非常麻烦。
通过 create schema , 划分区域, 把学生的,创建一个 schema 叫 Student,教师的,创建一个 schema 叫 Teacher
这样,对于专门负责学生信息管理的,就只负责 Student 这个 schema,表名全部是 Student.具体表名。
模式(架构)
类似命名空间(集合),里面用来存放该模式包含的各种数据库对象,在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
CREATE SCHEMA AUTHORIZATION [||]
如果没有指定,那么隐含为
要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的 CREATE SCHEMA的权限
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COL1 SMALLINT, COL2 INT, COL3 CHAR(20),
COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) );
为用户 ZHANG 创建了一个模式TEST,并在其中定义了一个表 TAB1
删除模式
DROP SCHEMA
CASCADE(级联)
删除模式的同时把该模式中所有的数据库对象全部删除。
RESTRICT(限制)--默认
如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。当该模式中没有任何下属的对象时才能执行。
数据字典
数据字典是一个预留空间,一个数据库,这是用来储存信息数据库本身;关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。在进行查询优化和查询处理时,数据字典中的信息是其重要依据。
基本表
定义基本表
CREATE TABLE < [架构名.] 表名 >( [ ] [, [ ] ] …[, ] );
完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由关系数据库管理系统自动检查