sql总结

一、数据库系统概论

1.数据库系统概论

1.几个重要的基本概念:

1.数据(data):
  数据是数据库中存储的基本对象。描述事物的符号记录称为数据。数据的解释是指对数据含义的说明,数据的含义称为数据的语义,数据与其语义是不可分的。

2.数据库(DataBase,DB):

  数据库时长期存储在计算机内、有组织的、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。

3.数据库管理系统(DataBase Management System,DBMS):

  数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库管理系统提供的语言功能:数据定义语言DDL、数据操纵语言DML。

4.数据库系统(DataBase System,DBS):

  数据库系统是由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的存储、管理、处理和维护数据的系统。一般简称数据库系统为数据库。

2.数据库的特点

(1)数据结构化 (2)数据的共享性高,冗余度低且易扩充 (3)数据独立性高(4)数据由DBMS统一管理和控制

2.关系模式

1.关系模式的数据结构:

(1)关系:一个关系对应通常说的是一张表。

(2)元组:表中的一行即为一个元组。

(3)属性:表中的一列即为一个属性,给每一个属性起一个名称即为属性名。

(4):也称为码键。表中的某个属性组,可以唯一确定一个元组。

(5):是一组具有相同数据类型的值的集合。属性的取值范围来自某个域。

(6)分量: 元组中的一个属性值。

(7)关系模式: 对关系的描述,一般表示为 关系名(属性1,属性2,···,属性n)。

2.数据库系统的三级模式结构与二级映像功能

(1)模式

  是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。

(2)外模式

  它是用户使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

(3)内模式

  一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。

二、关系数据库

1.关系数据结构定义及形式化定义

1.域是一组具有相同数据类型的值的集合。如自然数、整数、实数等

2.笛卡尔积笛卡尔积是域上的一种集合运算。是所有域的所有取值的一个组合,不能重复。

3.关系关系是一个二维表。表的每行对应一个元组,表的每列对应一个属性。

(1)候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。

(2)主码:若一个关系有多个候选码,则选定其中一个为主码。

(3)主属性:候选码的诸属性称为主属性。不包含在任何侯选码中的属性称为非主属性或非码属性。

关系可以有三种类型:基本关系,查询表和视图表。

4.关系模式关系的描述称为关系模式。表示为R(U, D, DOM, F)。

2.基本的关系操作

常用的关系操作:查询操作和插入,删除,修改操作两大部分。

查询:选择、投影、连接、除、并、差、交、笛卡尔积(选择、投影、并、差、笛卡尔基是5种基本操作)

3.关系的完整性

三大完整性原则分别是:实体完整性、参照完整性、用户自定义完整性。

4.关系代数

1.选择 σ:在关系R中选择满足给定条件的诸元组,是从行的角度进行的运算。

2.投影 π:从R中选择出若干属性列组成新的关系,投影操作主要是从列的角度进行运算。投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)。

3.连接 ⋈:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。一般的连接操作是从行的角度进行运算。自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

4.除 ÷:从行和列角度进行运算。

三、关系数据库标准语言SQL

2.数据定义

(1)模式的定义和删除

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;

DROP SCHEMA <模式名> CASCADE;

(2)基本表的定义,删除与修改

  CREATE TABLE <表名>(
	<列名><数据类型>[列级完整性约束条件]
	[,<列名><数据类型>[列级完整性约束条件]] 
	...
	[,<表级完整性约束条件> ] 
  );

先举个例子:

CREATE TABLE Student
		(Sno CHAR(9) PRIMARY KEY,
		 Sname CHAR(20) UNIQUE,
		 Ssex CHAR(2),
		 Sage SMALLINT,
		 Sdept CHAR(20)
		 );

其实在定义表的同时,注意说明完整性就好啦,primary key,not null,unique,foreign key()references ( ),check等。

修改:

  ALTER TABLE <表名>
  [ADD [COLUMN] <新列名><数据类型> [完整性约束]]
  [ADD <表级完整性约束>]
  [DROP [COLUMN]<列名>[CASCADE|RESTRICT]]
  [DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
  [ALTER COLUMN<列名><数据类型>] ;

删除:

  DROP TABLE <表名> [RESTRICT|CASCADE];

(3)索引的建立与删除

建立:

  CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
  ON <表名>(<列名> [<次序>] [,<列名>[<次序>]]...);

修改:

  ALTER INDEX <旧索引名> RENAME TO <新索引名>;

删除:

  DROP INDEX <索引名>;

3.数据查询

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

嗯,这里主要讲啦连接查询,嵌套查询和集合查询,附上自己之前的链接数据查询

4.数据更新

其中数据插入有两种方式,一种是插入元组,我;还有一种是插入查询结果,也就是查询集合。

INSERT 
INTO <表名>  [(<属性列1> [,<属性列2>)]
valuse(值,值。。);
INSERT 
INTO <表名>  [(<属性列1> [,<属性列2>)]
子查询;

修改:

UPDATE  <表名>
SET  <列名>=<表达式>[,<列名>=<表达式>][WHERE <条件>];

删除:

DELETE FROM <表名> 
[WHERE <条件>];

5.视图

创建:

CREATE  VIEW <视图名>  [(<列名>  [,<列名>])] 
AS  <子查询> 
[WITH  CHECK  OPTION];

删除:

DROP  VIEW  <视图名>[CASCADE];

四、数据库安全性

1.数据库安全性概述

1.数据库的不安全因素

(1) 非授权用户对数据库的恶意存放和破坏

(2) 数据库中重要或敏感的数据被泄露

(3) 安全环境的脆弱性

2.安全标准简介

  TCSEC和CC两个准则。

2.数据库安全性控制

  用户要求进入计算机时,系统首先根据输入的用户表示进行用户身份鉴定,只有合法的用户才准许进入计算机系统。对已经入系统的用户,数据库管理系统还要进行存取控制,只允许用户执行合法操作。操作系统也会有自己的保护措施。数据最后还可以以密码形式存储到数据库中。

1.用户身份鉴别

(1) 静态口令鉴别 (2) 动态口令鉴别 (3) 生物特征鉴别 (4) 智能卡鉴别

2.存取控制

  存取控制机制主要包括定义用户权限和合法权限检查两部分。

(1) 定义用户权限,并将用户权限登记到数据字典中

(2) 合法权限检查

定义用户权限和合法权限检查机制一起组成啦数据库管理系统的存取控制子系统。

  C2级的数据库管理系统支持自主存取控制,B1级的数据库管理系统支持强制存取控制。

自主存取控制:用户对于不同的数据库对象又不同的存取权限,不同的用户对同一对象也有不同的权限, 而且用户还可将其拥有的存取权限转授给其他用户。

强制存取控制:每一个数据库对象被标以一定的密级,每一个用户也被授予某一个级别的许可证,对于每一个对象,只有具有合法许可证的用户才可以存取。

3.自主存取控制方法

  用户权限是由两个元素组成的:数据库对象和操作类型。定义存储权限称为授权。在关系数据库中,存取控制的对象不仅有数据本身(基本表中的数据、属性列上的数据),还有数据库模式(包括数据库,基本表,视图和索引的创建)。

授予权限:

GRANT <权限>[,<权限>]... 
ON <对象类型> <对象名>[,<对象类型> <对象名>]… 
TO <用户>[,<用户>]... 
[WITH GRANT OPTION];
WITH GRANT OPTION;

收回权限:

REVOKE <权限>[,<权限>]... 
ON <对象类型> <对象名>[,<对象类型><对象名>]… 
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];

角色的相关控制:

1.角色的创建 
CREATE  ROLE  <角色名> 

2.给角色授权 
GRANT  <权限>[,<权限>]… 
ON <对象类型>对象名 
TO <角色>[,<角色>]3.将一个角色授予其他的角色或用户 
GRANT  <角色1>[,<角色2>]… 
TO  <角色3>[,<用户1>][WITH ADMIN OPTION]
--指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限授予其他角色

4.角色权限的收回 
REVOKE <权限>[,<权限>]… 
ON <对象类型> <对象名> 
FROM <角色>[,<角色>]

五、数据库完整性

1.实体完整性

一、实体完整性

1.定义实体完整性

例如:

create table Student
	(
	Sno    char(9)  primary key,
	Sname  char(20) not null,     
	Ssex   char(2),
	Sage   smallint,
	Sdept  char(20)
	);

(1)检查主码值是否唯一,如果不唯一则拒绝插入或修改。

(2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。,从而保证了实体完整性。

2.参照完整性

 
二、参照完整性

1.定义参照完整性

  关系模型的参照完整性create table中用foreign key短语定义哪些列为外码,用references短语指明这些外码参照哪些表的主码。

drop table if exists SC;
create table SC
	(
	Sno    char(9)  not null, 
	Cno    char(4)  not null,  
	Grade  smallint,
	primary key (Sno, Cno),						/*在表级定义实体完整性*/
	foreign key (Sno) references Student(Sno),  /*在表级定义参照完整性*/
	foreign key (Cno) references Course(Cno)   	/*在表级定义参照完整性*/
	);

  当对照表和参照表进行增,删,改操作时有可能破坏参照完整性。

  一般的,当对表的操作违反啦参照完整性,系统会默认策略,即拒绝执行。但是也可以让系统采取其他策略,在创建参照表的时候显式地说明。

3.用户自定义完整性

1.属性上约束条件的定义

  create table中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制,如:

(1)不允许取空值 (2)列值唯一 (3)用CHECK短语指定列值应该满足的条件

例如:

create table  SC
	(
	Sno    char(9),
	Cno    char(4),
	Grade  smallint check(Grade>=0 and Grade <=100),/*Grade取值范围是0到100*/
	primary key (Sno,Cno),
	foreign key (Sno) references Student(Sno),
	foreign key (Cno) references Course(Cno)
	);

 
四、完整性约束命名子句

  SQL还在CREATE TABLE 语句中提供拉完整性约束命名子句 CONSTRAINT ,用来对完整性约束条件命名,灵活地增加,删除一个完整性约束条件。

1.完整性约束命名子句

constraint <完整性约束条件名> <完整性约束条件>

4.触发器

  触发器是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中。任何用户对表的赠,删,该操作均由服务器自动激活。

1.定义触发器

触发器又叫事件-条件-动作规则。

一般格式为:

create trigger <触发器名>  
{before | after} <触发事件> on <表名>
referencing new|old row as<变量>
for each  {row | statement}
[when<触发条件>]<触发动作体>

  嗯,第一行的内容为创建一个触发器并起个名字,第二行说明触发事件,并且指出触发时机,第三行为给新旧变量起个别名,嗯至少我是这么理解的,哈哈,第四行表明是行级触发器还是语句级触发器,第五行表明触发条件,并且指出执行动作。嗯,差不多就是这样。看下面例子来理解吧!!!

举一个书上的例子:

create trigger  SC_T		
after update of Grade on SC
referencing
	 old row  as  OldTuple,
	 new row  as  NewTuple
for each row
when(NewTuple.Grade >= 1.1 * OldTuple.Grade)
	 insert into SC_U(Sno,Cno,OldGrade,NewGrade) 				
	 values(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade);

 
总结:

  总之,第一章和第二章介绍的是数据库的一些概念和一些操作,第三章是SQL语句的使用是重点也是难点,其中有表,视图等的定义,查询,更新和删除等操作。另外标准SQL和T-SQL还有一定的区别。第四章和第五章就是介绍完整性和安全性的概念和相关SQL子句等。学完发现自己之前忘啦不少,及时复习巩固吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谁会没有丶遗憾呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值