数据库总结

来源:互联网 发布:sql数据库没有服务器 编辑:程序博客网 时间:2024/05/02 04:46

1 基本概念

1.1 数据库分为层次模型、网状模型、关系模型

层次模型类似于数据结构里面的树,网状类似于图,用的最多的就是关系模型。

1.2 关系模型中的一些概念

整个一张表称为关系(关系为笛卡尔积的子集),表+属性一起得到关系模式,每个记录称为元组,每条记录中的的每个字段叫做属性

1.3 DBMS中的结构

数据库管理系统的结构分为内模式、模式、外模式,内模式对应着实际数据在物理介质上是如何存储的,可能存储为树形结构或者存储为hash结构等等,模式就是在sql语句中创建的表,一般用于嵌入式sql的CURD,外模式是对于特定用户特性应用,比如在sql语句中创建视图,限制用户对于原始表的访问。

这种方式保证了数据库管理系统的逻辑和物理的独立性。

1.4 实际系统的抽象

通过ER图将实际中各种关系模型和抽象成概念模型,然后将概念模型表示成数据库可以表示的数据模型,关键在一对一、多对一、多对多的数据库表现形式。一对一可任意一方加一个对方的主键即可,多对一在多方加一个一方的主键属性,多对多要生成第三张关系表保存(实际上多对多也可以一方保存另外一方的主键,但很明显存在大量的数据冗余,比如学生(sno,sname)--->选课(cno,cname)多对多关系,选课表完全也可以加一个字段sno作为外键也能实际的选课模型,但这样同一门课多人选择时,cname存在大量冗余,比如查询一共有多少课时,冗余带来不方便,总结下就是当自身的一条字段对应对方的多条字段时,自身不能存放对方的多条字段的,本质上就是违反第二范式:非主属性完全依赖主键(主键可以完全确定属性的值)

1.5 三范式

1 列不可分:每个属性不能再划分多个字段  2 属性完全依赖主键 3 属性直接依赖主键,不能传递依赖

1.6 杂七杂八

GRANT SELECT ON TABLE tableName TO user1--授权user1可以查询表tableName

REVOKE INSERT ON TABLE tableName FROM user1 CASCADE--级联取消授权

并发控制用Locking,修改用排他锁(只能自己操作),读取用共享锁(别人可以读);可能造成活锁(优先级队列解决),可能造成死锁(各有一个排他锁互相请求对方),通过事务等待图解决,如果图是一个环(算法拓扑排序貌似就可以检测到)表明死锁,找到代价最小的锁释放。

嵌入式sql的一般通过SQLCA(sql communication area)、游标、主变量实现。

sql查询的步骤:词法分析------->权限和完整性约束(数据字典中)分析--------->生成查询树语句-------->查询优化

事务满足ACID(acid---酸的英文单词):A-automicity   C-consistency  i-isolation  d-durability

BEGIN TRANSACTION           COMMIT            ROLLBACK

2 常见sql语句


2.1 模式(schema)、表(table)、视图(View)

首先表创建完成以后是有ALTER修改语句的,但模式没有。

模式相当于java里面的包、c++里面的namespace。DMBS的结构分为内模式、外模式、模式,模式实际上是关系的集合,关系就是表,因此翻译成模式(表示表的集合)貌似是有点道理的。

语句:

1 CREATE SCHEMA/TABLE schemaName/tableName;DROP SCHEMA/TABLE schemaName/tableName CASCADE/RESTRICT;


2 CREATE SCHEMA schemaName --后面可以跟直接创建表

CREATE TABLE tableName(columnName1  columnType1 constraints1,columnName2 columnType2 constraints2);

3 CREATE SCHEMA schemaName AUTHORIZATION wang--授权给wang

4 CREATE TABLE student(

  sno INT PRIMARY KEY NOT NULL UNIQUE,

  sname VARCHAR(20) NOT NULL,

  ssex VARCHAR(2) CHECK(ssex IN('男','女'))

);

5  CREATE TABLE sc(

sno INT NOT NULL UNIQUE,

cno INT NOT NULL UNIQUE,

PRIMARY KEY(sno,cno),

FOREIGN KEY(sno) REFERENCES student(sno)

);

6 CREATE TABLE sc(

   sno INT NOT NULL UNIQUE REFERENCES student(sno),

   cno INT NOT NULL UNIQUE,

   CONSTRAINT   'f1'  FOREIGN KEY(cno) REFERENCES course(cno),

   ON DELETE CASCADE

);

7 ALTER TABLE tableName ADD columnName columnType

8 ALTER TABLE tableName ALTER COLUMN columnName columnType

9 ALTER TABLE tableName ADD UNIQUE(columnName)

10  CREATE VIEW viewName AS ...../DROP VIEW viewName

11 INSERT INTO tableName(columnName1,columnName2...) VALUES(value1,value2...) ...

12 UPDATE table SET columnName1 = value1,columnName2 = value2

2.2 select查询

单表:

SELECT DISTINCT sname 'STUDENT_NAME','constant value',2012-sage,islower(sdept) FROM student...

GROUP BY.....HAVING.....

ORDER BY....

多表:

1 嵌套查询:找到一些字段然后当成临时表结果集再次查询

2 直接连接: SELECT 多表中需要的所有字段 FROM 表逗号直接连接 WHERE 列出所有条件

3 左连接: LEFT JOIN.... ON

3 WHERE中的条件: NOT;OR;AND EXISTS  !=   <>   <  >  ANY()  ALL()





原创粉丝点击