数据库总结
来源:互联网 发布: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()
- 数据库 总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- 《数据库》总结
- 数据库总结
- 数据库总结
- 数据库总结
- 数据库总结
- java.lang.IllegalArgumentException: no dialog with id 1 was ever shown via Activity#showDialog
- How to get the data from a cell when I click on the GridButtonColumn of the same row
- C++第二次测验——二维数组各行各列之和
- 软件开发者最重要的四大技能
- zoj 1001纪念我的第一个java ACM题
- 数据库总结
- 【OpenCV入门指南】第十二篇 在Windows平台下分享OpenCV程序
- WinEdit6.0, 编辑环境设定
- C++第二次测验——第二大值
- 性能监控/优化系列——CPU相关
- 面试浅谈
- 谁在蚕食你的手机话费-初析WM智能手机木马与利益链
- Primer plus C++ 第十一章 使用类 _操作符重载
- 性能调优攻略