SQL基础

按照课程实验要求,安装Oracle,使用sqlplus完成实验。

在cmd中输入命令sqlplus "/as sysdba"进入oracle数据库,这是用sys用户通过windows系统的控制台命令窗口登录到oracle数据库的命令窗口。select status from v$instance;命令可查询数据库是否成功安装。v$开头的是oracle的动态表,v$instance为oracle数据库的动态表之一,该表记录数据库实例的各种信息。一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下可以定义多个表、视图、索引等数据库对象
数据库语句以;结束。

show user;:查询当前数据库用户。sys用户是oracle数据库的超级用户,相当于windows的administrator用户。sys权限特别大,可以启动、关闭、数据库,甚至可以删除整个数据库。
show parameter db_name:查看数据库名称。
show parameter:查看数据库的各种参数值。

CREATE USER xxx IDENTIFIED BY xxx;新建用户。
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;模式定义语句。<模式名>缺省时,隐含为<用户名>,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA的权限。

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
CREATE TABLE TAB1(

                  );           //为用户创建一张表。

DROP SCHEMA <模式名><CASCADE | RESTRICT>删除模式,其中CASCADE,RESTRICT必选其一,选择CASCADE(级联)将完全删除该模式,包括其中所有的数据库对象;选择RESTRICT(限制)表示只有当模式为空时才删除,如果模式中定义了下属的数据库对象(表,视图等),则拒绝执行语句。
创建一个模式就建立了一个数据库的名字空间,一个框架,

CREATE TABLE <表名>
        (<列名> <数据类型> [列级完整性约束条件,可省],
        <列名> <数据类型> [列级完整性约束条件],
        ...
        <列名> <数据类型> [列级完整性约束条件],
        PRIMARY KEY(),   // 定义主码
        );

定义基本表命令,建表的同时可以定义与该表有关的完整性约束条件,这些完整性约束条件被存于系统的数据字典中,当用户操作表中数据时数据库管理系统会自动检查该操作是否违背这些约束性条件。常见的约束条件有PRIMARY KEY主码,UNIQUE取唯一值,NOT NULL不能取空值。

修改基本表

ALTER TABLE<表名>
ADD [COLOMN] <新列名> <数据类型> [完整性约束]   // []内表示可缺省
ADD [<表级完整性约束>]
DROP [COLUMN] <列名> [CASCADE | RESTRICT]       // 删除某列
DROP CONSTRAINT <完整性约束> [CASCADE | RESTRICT]                 //删除某列的完整性约束条件
ALTER COLUMN <列名> <数据类型>;       //修改某列原有的列定义

DROP TABLE <表名> [CASCADE | RESTRICT]:删除基本表。默认以RESTRICT方式。

插入元组

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

将新元组插入指定表中。INTO子句中没有出现的属性列,新元组在这些列上将取空值。对于那些说明了NOT NULL的列不可为空,否则报错。
当属性列为空时,表示要在所有列上都指定值,属性列的次序与CREATE TABLE的次序相同。

实验用到

实验一
CREATE USER zyh IDENTIFIED BY zyh123;:创建新用户zyh
GRANT DBA TO zyh;:授予其权限。
CONNECT zyh/zyh123;:以该用户身份登录Oracle。

创建基表图书管理系统

CREATE TABLE 图书
               (图书编号 CHAR(4),
                分类号 CHAR(4) NOT NULL,
                书名 VARCHAR(12),
                作者 VARCHAR(5),
                出版单位 VARCHAR(10),
                单价 DEC(5,2),
                PRIMARY KEY(图书编号));

alter table 图书 modify 书名 varchar(20);中途修改表图书里书名列的类型长度。
ALTER TABLE 图书 MODIFY 出版单位 VARCHAR(20);
ALTER TABLE 读者 MODIFY 单位 VARCHAR(20);

数据库安全性机制

数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏
对数据库安全性产生威胁的因素主要有以下几个方面

非授权用户对数据的恶意存取和破坏
数据库中重要或者敏感的数据被泄露
安全环境的脆弱性

TCSEC/TDI安全级别划分:D、C1、C2、B1、B2、B3、A1,安全级别逐渐增高。

在一般的计算机系统中,安全措施是一级一级层层设置的。

常用的用户身份鉴别方法有:静态口令鉴别、动态口令鉴别、生物特征鉴别、智能卡鉴别

数据库的存取控制机制:确保只授权给有资格的用户访问数据库的权限,同时令所有未被授权的人员无法接近数据。
存取控制机制主要包括定义用户权限合法权限检查两部分。

有两种存取控制方法:自主存取控制和强制存取控制

自主存取控制

用户“自主”地决定将数据的存取权限授予何人、决定是否也将“授权”地权限授予别人。因此称这样的存取控制是自主存取控制。

GRANT <权限>
ON  <对象>
TO <用户>
[WITH GRANT OPTION];

将对指定操作对象的指定操作权限授予指定的用户。如果指定了WITH GRANT OPTION选项,则获得权限的用户还可以把权限及其子集转授给其他用户。

REVOKE <权限>
ON <对象>
FROM <> [CASCADE|RESTRICT];

REVOKE语句用来收回权限。CASCADE级联收回了由该对象授予出去的所有用户的权限。

CREATE USER <username> [WITH DBA|RESOURCE|CONNECT];

只用系统的超级用户才有权创建一个新的数据库用户。新创建的用户有三种权限:DBA RESOURCE CONNECT

拥有CONNECT权限的用户不能创建新用户、模式、基本表,只能登陆数据库。
拥有RESOURCE权限的用户不能创建新用户、模式,能创建基本表
拥有DBA权限的用户是系统的超级用户,拥有所有权限。

CREATE ROLE <rolename>

GRANT <权限>
ON <对象>
TO <角色>;

GRANT <角色>
TO <角色|用户>
[WITH ADMIN OPTION];

REVOKE <权限>
ON <对象>
FROM <角色>;

数据库角色是被命名的一组与数据库操作相关的权限,角色是权限的集合。
如果指定了WITH ADMIN OPTION子句,则获得某种权限的角色或用户还可以转授权限。

数据查询

SELECT [ALL|DISTINCT] <目标列表达式>
FRPM <表名或视图名> [, <表名或视图名>] [AS <别名>]
WHERE <条件表达式>
GROUP BY <列名1> [HAVING <条件表达式>]
ORDER BY <列名2> [ASC|DESC];

//查询条件
= > < <= >= != <> !> !< NOT
BETWEEN .. AND .., NOT BETWEEN AND
IN, NOT IN
LIKE, NOT LIKE
IS NULL, IS NOT NULL
AND, OR, NOT
EXIST

根据WHERE子句的条件表达式从FROM子句指定的基本表、试图或派生表中找出满足条件的元组,再按SELECT子句中的目标列表达式选出元组中的属性值形成结果表。
SELECT语句的执行过程一定不能乱。WHERE->GROUP->HAVING->ORDER
ORDER BY子句对查询结果按照属性的升降来排序。
GROUP BY子句将查询结果按照一列或多列的值分组,值相等的为一组。对查询结果分组的目的是细化聚集函数的作用对象。聚集函数的操作对象是一个组,如果没有分组的话就是对整个表操作。HAVING短语作用于组,只选择满足条件的组输出。

字符匹配

谓词LIKE可以用来进行字符串的匹配。

[NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>']
通配符有 %(多字符)  _(单字符)

例如a%b表示任何以a开头,以b结尾的字符串;a_b表示以a开头,以b结尾的长度为3的任意字符串。

ESCAPE '\'表示'\'为换码字符。

// 这样字符串中跟在 \ 后面的字符 _ 就是普通的字符,不再是通配符
' DB \_Design' ESCAPE'\';

聚集函数

COUNT (*)                        //统计元组个数
COUNT (DISTINCT|ALL <列名>)      //统计一列中值的个数
SUM (DISTINCT|ALL <列名>)
AVG (DISTINCT|ALL <列名>)
MAX (DISTINCT|ALL <列名>)
MIN (DISTINCT|ALL <列名>)

聚集函数只能用于SELECT子句和HAVING子句,不能用于WHERE子句

分类: 数据库

0 条评论

发表评论

邮箱地址不会被公开。