数据:
数据的概念包括两方面的含义,一是描述事物特性的数据内容,也就是我们常说的信息。二是存储在某一种媒体上的数据形式,即符号。数据是承载信息的物理符号或载体,而信息是数据的内涵。
(描述事物的符号记录称为数据。)
数据库:
数据库是长期存储在计算机内的、有结构的(有组织的)、可共享的大量数据的集合。
数据库中的数据的特点:
①按一定数据模型组织、描述和存储。
②具有较小的冗余度。
③具有较高的数据独立性和易扩展性。
④可被用户共享。
数据库管理系统(DBMS):
数据库管理系统(DBMS)是位于用户与操作系统之间的一层数据管理软件。数据库管理系统(DBMS)的主要任务是科学有效地组织和存储数据、高效地获取和管理数据、接受和完成用户提出的访问数据的各种请求。
数据库管理系统(DBMS)的主要功能:
①数据定义功能。
②数据操作功能。
③数据库运行控制功能。
④数据库的建立和维护功能。
数据库系统(DBS):
数据库系统(DBS)是指拥有数据库技术支持的计算机系统,一般由数据库、数据库管理系统及开发工具、应用系统、数据库管理员和用户构成。数据库系统可以实现有组织地、动态地存储大量相关数据,提供数据处理和信息资源共享服务。
与文件系统相比,数据库系统的特点:
①数据的结构化。
②最小冗余度。
③数据的共享。
④数据与程序独立。
⑤数据的安全性和完整性。
数据库系统的组成:
数据库系统一般由支持数据库运行的软硬件、数据库、数据库管理系统、数据库管理员、用户等部分组成。
模式:
模式是数据库中全体数据的逻辑结构和特征的描述,它仅仅涉及“型”的描述,不涉及具体的“值”。其中“型”是数据模型中对某一类数据结构和属性的说明,而“值”是“型”的一个具体赋值。
模式的特点:
①模式的一个具体描述称为模式的一个实例。
②模式是相对稳定的,而实例是相对变动的。
③模式反映的是数据的结构及其联系,而实例反映的是数据库某一时刻的状态。
数据库系统的三级模式结构:
模式:
模式也称逻辑模式或概念模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,是数据库系统模式结构的中间层。一个数据库只有一个模式。
外模式:
外模式也称为子模式或用户模式,它是数据库用户(程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征描述,是数据和用户的数据视图,是与某一应用有关的数据的逻辑表示。
外模式一般是模式的子集,一个模式可以有多个外模式,一个应用程序只能使用一个外模式,外模式是保证数据安全的一个有力措施。
内模式:
内模式也称存储模式,是数据库在物理存储器上具体实现的描述,是数据在数据库内部的表示方法,也是对数据物理结构和存储方式的描述。一个数据库只有一个内模式。
数据库的二级映射功能与数据独立性:
外模式/模式映射:
对于每一个外模式,数据库管理系统都有一个外模式/模式映射,它定义了外模式与模式之间的对应关系。当模式改变时,由数据库管理员对各个外模式/模式映射做相应的改变,这里的映射是把用户数据库与概念数据库联系起来,从而使外模式保持不变,这就保证了数据库的逻辑独立性。
模式/内模式映射:
数据库只有一个模式,也只有一个内模式,所以模式/内模式映射是唯一的。这种映射把概念数据库与物理数据库联系起来,定义了数据全局逻辑结构与存储结构之间的对应关系。当数据库存储结构改变了,由数据库管理员对模式/内模式映射做相应的改变,从而使模式保持不变,从而应用程序也不必改,这就保证了数据与程序的物理独立性。
关系模型:
关系模型是建立在数学概念上的,与层次模型、网状模型相比,关系模型是一种最重要的数据模型。它主要由关系数据结构、关系操作集合、关系完整性约束三部分组成。
实际上,关系模型可以理解为用二维表格结构来表示实体和实体之间联系的模型,表格的列表示关系的属性,表格的行表示关系中的元组。
SQL的数据定义语句:
操作对象 | 操作方式 | ||
创建 | 删除 | 修改 | |
模式 | CREATE SCHEMA | DROP SCHEMA | —— |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | —— |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
定义模式:
在 SQL中,模式定义语句如下:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
如果没有指定 <模式名>,那么 <模式名> 隐含为 <用户名>。
要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授权的CREATE SCHEMA的权限。
例题:为用户WANG定义一个学生-课程模式S-T。
CREATE SCHEMA S-T AUTHORIZATION WANG;
例题:
CREATE SCHEMA AUTHORIZATION WANG;
该语句没有指定 <模式名>,所以 <模式名> 隐含为用户名 WANG。
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义改模式包含的数据库对象,例如基本表 、视图、索引等。
用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图、定义授权,即:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义字句>|<视图定义字句>|<授权定义字句>];
例题:为用户ZHANG创建一个模式TEST,并在其中定义一个表TABLE。
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1 (COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
删除模式:
在 SQL中,删除模式语句如下:
DROP SCHEMA <模式名> <CASCADE|RESTERICT>;
其中,CASCADE 和 RESTERICT 两者必选其一。选择了 CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除。选择了RESTERICT(限制)表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒该删除语句的执行,只有当该模式中没有任何下属的数据库对象时才能执行 DROP SCHEMA 语句。
例题:
DROP SCHEMA ZHANG CASCADE;
该语句删除了模式 ZHANG,同时,该模式中已经定义的基本表 TAB1 也被删除了。
定义基本表:
SQL 语言使用 CREATE TABLE 语句定义基本表,其基本格式如下:
CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件],
<列名><数据类型>[列级完整性约束条件],
...
<表级完整性约束条件>);
例题:建立一个“学生”表 Student。
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY, /*列级完整性约束条件,Sno是主码*/
Sname CHAR(20) UNIQUE, /*列级完整性约束条件,Sname获取唯一值*/
Ssex CHAR(20),
Sage SMALLINT,
Sdept CHAR(20)
);
例题:建立一个“课程”表Course。
本例说明了参照表和被参照表可以是同一个表。
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, /*列级完整性约束条件,Cno是主码*/
Cname CHAR(40) NOT NULL, /*列级完整性约束条件,Cname不能取空值*/
Cpno CHAR(4), /*Cpno的含义是先行课程的编号*/
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno)
/*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
);
例题:建立“学生选课”表SC。
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
GRADE SMALLINT,
PRIMARY KEY(Sno,Cno), /*主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY(Sno) REFERENCES Student(Sno),
/*表级完整性约束条件,Sno是外码,被参照表是Student*/
FOREIGN KEY(Cno) REFERENCES Course(Cno)
/*表级完整性约束条件,Cno是外码,被参照表是Course*/
);
数据类型:
数据类型 | 含义 |
---|---|
CHAR(n),CHARACTER(n) | 长度为n的定长字符串 |
VARCHAR(n),CHARACTERVARYING(n) | 最大长度为n的变长字符串 |
CLOB | 字符串大对象 |
BLOB | 二进制大对象 |
INT,INTEGER | 长整数(4字节) |
SMALLINT | 短整数(2字节) |
BIGINT | 大整数(8字节) |
NUMERIC(p,d) | 定点数,由p位数字(不包括符号、小数点)组成,小数点后面有d位数字 |
DECIMAL(p,d),DEC(p,d) | 同NUMERIC(p,d) |
REAL | 取决于机器精度的单精度浮点数 |
DOUBLE PRECISION | 取决于机器精度的双精度浮点数 |
FLOAT(n) | 可选精度的浮点数,精度至少为n位数字 |
BOOLEAN | 逻辑布尔量 |
DATE | 日期,包含年、月、日,格式为YYYY-MM-DD |
TIME | 时间,包含一日的时、分、秒,格式为HH:MM:SS |
TIMESTAMP | 时间戳类型 |
INTERVAL | 时间间隔类型 |
模式与表:
每一个基本表都属于一个模式,一个模式包含多个基本表。定义基本表时一般有三种方法定义它所属的模式。例如前面已经定义了一个学生-课程模式 S-T,现在要在 S-T 中定义 Student、Course、SC等基本表。
方法一:在表名中明显地给出模式名。
CREATE TABLE S-T.Student(...); /*Student所属的模式是S-T*/
CREATE TABLE S-T.Course(...); /*Course所属的模式是S-T*/
CREATE TABLE S-T.SC(...); /*SC所属的模式是S-T*/
方法二:在创建模式语句中同时创建表,比如前面的“ 例题:为用户ZHANG创建一个模式TEST,并在其中定义一个表TABLE。”
方法三:设置所属的模式,这样在创建表时表名中不必给出模式名。
修改基本表:
SQL 语言用 ALTER TABLE 语句修改基本表,其一般格式为:
ALTER TABLE <表名>
[ADD [COLUMN] <新列名> <数据类型> [完整性约束]]
[ADD <表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE|RESTERICT]]
[DROP CONSTRAINT <完整性约束名> [CASCADE|RESTERICT]]
[ALTER COLUMN <列名> <数据类型>];
其中,<表名> 是要修改的基本表,ADD 子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。DROP COLUMN 子句用于删除表中的列,如果指定了 CASCADE 短语,则自动删除引用了该列的其他对象,比如视图。如果指定了 RESTERICT 短语,则如果该列被其他对象引用,数据库管理系统将拒绝删除该列。DROP CONSTRAINT 子句用于删除指定的完整性约束条件。ALTER COLUMN 子句用于修改原有的列定义,包括修改列名和数据类型。
例题:向 Student 表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATE;
不论基本表中原来是否已有数据,新增加的列一律为空值。
例题:将年龄的数据类型由字符型(假设原来的数据类型为字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
例题:增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表:
使用 DROP TABLE 语句删除基本表的一般格式为:
DROP TABLE <表名> [RESTERICT|CASCADE];
若选择 RESTERICT,则该表的删除是有限制条件的,欲删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。
若选择 CASCADE,则该表的删除是没有限制条件的,在删除基本表的同时,相关的依赖对象,例如视图,都将一起被删除。
例题:删除 Student 表。
DROP TABLE Student CASCADE;
例题:若表上有视图,选择 RESTERICT 时表不能被删除。选择 CASCADE 时可以删除表,视图也自动被删除。
CREATE VIEW IS_Student /*Student表上建立视图*/
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';
DROP TABLE Student RESTRICT; /*删除Student表*/
--ERROR: cannot drop table Student because other objects depend on it
/*系统返回错误信息,存在依赖该表的对象,此表不能被删除*/
DROP TABLE Student CASCADE; /*删除Student表*/
--NOTICE: drop cascades to view IS_Student
/*系统返回提示,此表上的视图也被删除*/
SELECT*
FROM IS_Student;
--ERROR: relation "IS_Student" does not exit
/*系统返回提示,此表不存在*/
建立索引:
在 SQL 语言中,建立索引使用 CREAT INDEX 语句,其一般格式为:
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名> (<列名> [<次序>],<列名> [<次序>]...);
其中,<表名> 是要建索引的基本表的名字。索引可以建立在该表的一列或者多列上,各列名之间用逗号分隔。每个 <列名> 后面还可以用 <次序> 指定索引值的排列次序,可选 ASC(升序),或DESC(降序),默认值为 ASC(升序)。
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER 表示要建立的索引是聚簇索引。
例题:为学生-课程数据库中的 Student、Courese 和 SC 三个表建立索引,其中 Student 表按学号升序建立唯一索引,Courese 按课程号升序建立唯一索引,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);
修改索引:
可以使用 ALTER INDEX 语句对已经建立的索引进行重命名,其一般格式为:
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
例题:将 SC 表的 SCno 索引名改为 SCSno。
ALTER INDEX SCno RENAME TO SCSno;
删除索引:
在 SQL 中,删除索引使用 DROP INDEX 语句,其一般格式为:
DROP INDEX <索引名>;
例题:删除 Student 表的 Stusname 索引。
DROP INDEX Stusname;
删除索引时,系统会同时从数据字典中删去有关该索引的描述。
数据字典:
数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。
关系数据库在执行 SQL 的数据定义语句时,实际上就是在更新数据字典表中的相应信息。在进行查询优化和查询处理时,数据字典中的信息是其重要依据。