数据库基础知识(一)

1.      SQL语言

SQL是结构化查询语言(StruCtured Query Language)的缩写,包含数据查询、数据操纵、数据定义和数据控制

1 数据操纵(DML)主要包括插入数据、修改数据以及删除数据;

2 数据定义语言(DDL),实现数据定义功能,可对数据库用户、基本表、视图、索引进行定义与撤销。

3 数据控制语言(DCL)用于对数据库进行统一的控制管理,保证数据在用户共享的情况下能够安全。

 

基本的SQL语句有select、insert、update、delete、create(数据表的建立)、drop(数据表的删除)、grant(用户授予系统权限)、revoke(收回系统权限)等。

2.      SQL语句的例子

如有3个基本表:学生信息表S(Sno,Sname,age,sex)

                选课信心表SC(Sno,Cno,SCgrade)

                课程信息表C(Cno,Cname,Cteacher)

 1. 将SC表中每门课程的平均成绩插入到另一个已经存在的表SC_C(Cno,Cname,avg_grage)中:

  Insert into SC_C (Cno, Cname, avg_grage)

Select SC.Cno, C.name,avg (SCgrade) from SC, C where SC.Cno=C.Cno

 2. 从SC表中把选xx老师所授课成的女生的选课记录删除

  Delete from SC,S,C where SC.Sno=S.SNO and SC.Cno=C.Cnoand C.Cteacher=‘xx’;

 3. 规定选修xx老师的课程的成绩都应该在80分以上

  Alert table SC,S, C

  Add constraint grade check (grade>=80)

  where SC.Sno=S.Sno and SC.Cno=C.Cno andC.Cteacher=‘xx’;

 4. 查出没有选修过xx老师的课程的所有学生的姓名

  Select Sname from S

  Where not exists(

Select* from SC,C where SC.Cno=C.Cno and  Cteacher=“xx” and SC.Sno=S.Sno)

 5. 列出“1”号课程成绩比“2”号成绩高的所有学生

       select S.Sno, S.Sname

              from S,(

              select SC1.Sno

              from SC SC1, C C1, SC SC2, C C2

              where SC1.Cno=C1.Cno and C1.name='1'

              andSC2.Cno=C2.Cno and C2.name='2'

              and SC1.SCgrade>SC2.SCgrade

              )SC where S.Sno=SC.Sno

3.      Delete与truncate的区别

这两个命令都可以用来删除一个表中的数据。

不同点是:1)truncate是一个数据定义语言,会被隐式地提交,一旦执行不能回滚。Delete执行的过程是每次从表中删除一行数据,同时将删除的操作以日志的形式进行保存,一遍进行回滚操作。2)用delete操作后,被删除的数据占用的存储空间还在,可以恢复,而truncate删除数据后,立即释放存储空间,3)truncate执行速度比delete快。

4.      内连接和外连接

1.内连接也称自然连接,只有两个表相匹配的行才能在结果中集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据,这样容易对视信息。语法:

Selectfiledlist from table [inner] join table2 on table1.column=table2.column

2.外连接不仅包含符号链接条件的行,而且包括左表、右表或两边链表中的所有数据行。SQL外连接有3种类型:左外连接、右外连接和全外连接。

5.      事务

事务是数据库中一个单独的执行单元(Unit),它通常由高级数据库操作语言或编程语言编写的用户程序指向所引起。事务必须满足4个属性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),即ACID。

1) 原子性,即市区不可分割,当数据修改时,要么全执行,要么全不执行,不允许事务部分地完成。

2) 一致性,一个事务执行前后,数据库必须保持一致性状态。保持数据库满足模式锁指定的约束,由并发控制机制实现。数据不一致包括丢失数据修改、读“脏”数据、不可重复度和产生“幽灵”数据。

3) 隔离性,即独立性,为了保证数据安全,将一个事务内部的操作与事务的操作隔离起来,不被其他正在进行的事务看到。数据库的事务隔离级别:不提交的读、提交的读、可重复的读和串行化。也是解决临时更新与消除级联回滚问题的一种方式。

4) 持久性,DBMS保证事务对数据库中的数据修改时永久性。通过数据库备份与恢复来保证的。

6.      存储过程

创建存储过程的语法:

Createprocedure sp_name @[参数名][类型]

                                           As  begin  …….end

调用存储的过程:exec sp_name [参数名]

删除存储过程: drop proceduresp_name

1)使用存储过程可以增强SQL语言的功能和灵活性,可以完成复杂的判断和运算,保证数据安全和完整性。

2)存储过程与函数的区别:

a. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用;

b. 存储过程实现的功能较为复杂,而函数实现的功能针对性较强;

c. 函数只能返回一个值或对象,存储过程可以返回多个参数;

d. 函数可以嵌入在SQL中使用,存储过程不可以;

e. 函数不能直接操作实体表,只能操作内建表;

f. 存储过程执行速度快。

7.      各种范式

为了保证数据正确地分布到数据库的表中,使用正确的数据结构,按照“数据库规范化”对表进行设计,减少数据库中的数据冗余,增强数据的一致性。范化使在识别数据库中的数据元素、关系以及定义所需的表和各种表中的项目这些初始化工作之后的一个细化的过程。

1)1NF(第一范式),值的每一列(属性)都是不可分割的基本数据项,同一列不能有多个值。简言之,就是无重复的列,

2)2NF(第二范式),是在第一范式的基础上建立起来的,如果关系模式R为第一范式模式,并且R中的每一个非主属性完全依赖于R的某个候选键(是属性的组合),则R为第二范式模式(如果A是关系模式R的候选键的一个属性,则称A是R的主属性)。

3)3NF(第三范式),如果R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式。

例如学生表(学号,姓名,课程号,成绩),其中的关系依赖为:学号—姓名,(学号,课程号)—成绩,(学号,姓名)—成绩。因为有两个候选键(学号,课程号)(姓名,课程号),这里姓名不重复,非主属性就是成绩对键不存在部分依赖,也不存在传递依赖,所以属于第三范式。

4)BCNF,在第三范式的基础上,如果关系模式R是第一范式,且每个属性都不传递依赖R的候选键,那么R成为BCNF模式。

例如仓库关系表(仓库号,存储物品号,管理员号,数量),满足一个管理员只在一个仓库工作,一个仓库可以存储多种物品,则:

(仓库号,存储物品号)——(管理员号,数量)

(管理员号,存储物品号)——(仓库号,数量)

所以,(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表的候选键,表中的唯一非关键字段是数量,它符合第三范式。但是由于

(仓库号)——(管理员号)

(管理员号)——(仓库号)存在关键字段决定关键字的情况,所以不符合BCNF。将表分为(仓库号,管理员号)和(仓库号,存储物品号,数量),就符合BCNF。

  5)4NF(第四范式),D是关系模式R上的多值依赖集合,如果D中存在凡多值依赖X——Y时,X必是R的超键,那么R就是第四范式。

                                             

8.      触发器

触发器是一种特殊类型的存储过程,它由事件触发,而不是程序调用或手工启动,自动来完成SQL语句。保证数据的有效性和完整性,完成更为复杂的数据约束。


根据SQL的不同触发器分为DML触发器和DLL触发器。DML触发器是当数据库服务器发生数据操作语言事件时执行的存储过程,有After和Instead Of两种触发器。After触发器被激活触发是在记录改变之后进行的一种触发器。Instead Of是在记录改变之前。DLL触发器是在响应数据定义语言事件时执行的存储过程。例如:

该触发器的功能是在每周末进行数据表更新,若当前用户没有访问Weekend_Update_Ok表的权限,则需要重新授权。

  Create or replace Triggerupdate_on_weekends_check

Before update of sal on EMP

For each row

Declare

My_count number(4);

Begin

Select Count (u_name)

From Weekend_Update_Ok Into my_count

Where u_name=user_name;

If my_count=0 Then

Raise_Application_Error(20508,‘Update not alloweb’);

End if;

End;

事前触发发生在事件发生之前,用于验证一些条件或进行一些准备工作,获得之前和新的字段值;事后触发发生在事件发生之后,做收尾工作,保证事务的完整性。

9.      游标

游标提供了一种对从表中检索的数据进行操作的灵手段,实际上是一种能包含多条数据记录的结果中每次提取一条记录的机制。

游标允许应用程序对查询语句select返回结果中的每一行进行相同或不同的操作,而不是一次对整个结果集进行同一操作;提供对基于游标位置而对表中数据进行删除或更新的功能。

10.      数据日志满了,会怎样

日志文件记录所有对数据库数据的修改,主要是保护数据库以防故障发生,以及恢复数据时 使用。

1) 每一个数据库至少包含两个日志文件组,每个日志文件组至少包含两个日志文件成员;

2) 日志文件组一循环方式进行写操作;

3) 每一个日志文件成员对应一个物理文件。

一旦数据库的日志满了,就只能执行查询等读操作,不能执行更改、备份等操作,因为任何写操作都要记录日志。

11.      Union和union all的区别

Union在进行表求并集合后去掉重复的元素,所以会对产生的结果集进行排序操作运算,删除重复的记录再返回结果。

Union all则只是简单地将两个结果集合并后就返回结果。

12.      视图

视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本项不同,它是一个虚表。在数据库中,存放的只是视图的定义,而不是存放视图包含的数据项,这些项目仍然存放在原来的基本表结构中。

视图的作用:可以简化数据查询语句;可以使用户能从多角度看待同一数据;通过引入视图可以提高数据的安全性;视图提供一定程度的逻辑独立性等。

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL(Structured Query Language)是一种用于管理关系型数据库的语言。它可以用于创建、修改和查询数据库的表和数据。 以下是一些 SQL 数据库基础知识: 1. 数据库数据库是一个组织和存储数据的集合。它可以包含多个表和其他对象,例如视图、存储过程和触发器。 2. 表:表是数据数据库的结构化表示。每个表由一系列列组成,每列定义了表存储的数据类型。 3. 列:列是表的一个字段,它定义了数据的类型。例如,可以有一个名为“ID”的列,用于存储唯一的标识符。 4. 行:行是表的一个记录,它包含了一组相关的数据。每行的数据对应每个列。 5. 主键:主键是表唯一标识每行的一列或一组列。它用于确保表的每个行都有一个唯一标识符。 6. 外键:外键是表的一列,它与另一个表的主键相关联。外键用于在多个表之间建立关系。 7. 查询:查询是使用 SQL 语句从数据库检索数据的过程。常见的查询操作包括 SELECT、INSERT、UPDATE 和 DELETE。 8. SELECT 语句:SELECT 语句用于从表检索数据。它允许你指定要检索的列和筛选条件,还可以用于排序和分组数据。 9. INSERT 语句:INSERT 语句用于向表插入新的行。 10. UPDATE 语句:UPDATE 语句用于更新表数据。 11. DELETE 语句:DELETE 语句用于从表删除行。 这些是 SQL 数据库的一些基本概念和操作。在实际应用,SQL 还有许多其他功能和高级用法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值