首页 > 技术文章 > 1. 数据库学习笔记

josie-xu 2019-02-26 16:12 原文

一、数据库简介
1.概念
(1)数据:描述事物的符号称为数据,是存储在数据库中的基本对象。
(2)数据库:数据库是长期存储在计算机上内的有组织、可共享的数据集合。
(3)数据库管理系统:用户和操作系统之间的一层数据管理软件。
2.分类
2.1 关系型数据库:关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
  • Mysql和Oracle数据库,互联网运维最常用的是MySQL 
  • 通过SQL结构化查询语句存储数据 
  • 保持数据一致性方面很强,ACID理论
2.2 非关系型数据库:也被成为NoSQL数据库,NOSQL的本意是“Not Only SQL”,伴随互联网Web2.0网站的兴起,传统的关系型数据库IO瓶颈、性能瓶颈都难以有效突破。高性能、高并发、对数据一致性要求不高 
  • NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充 
  • NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能 
  • NOSQL典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库), Facebook的Cassandra,Apache的HBase
1.非关系型数据库种类:
(1)键值(Key-Value)存储数据库
 键值(Key-Value)数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署、高并发 
典型产品:Memcached、Redis、MemcacheDB、BerkeleyDB 
(2)列存储(Column-oriedted)数据库 ======>了解即可,一般公司用不到
典型产品:Cassandra,HBase 
(3)面向文档(Document-Oriented)数据库
 面向文档数据库会将以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。数据可以使用XML、JSON或者JSONB等多种形式存储 
典型产品:MorgoDB、CouchDB 
2.非关系型数据库介绍:
(1)Memcached
由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的特久化存储机制和异步主复制机制,使Memcached具备了事务恢复能力、持久化数据能力和分布式复制能力
(2) Redis(key-value)
  • 支持内存缓存,这个功能相当于memcached 
  • 支持持久化存储,这个功能相当于memcachedb,ttserver 
  • 数据库类型更丰富。比其他key-value库功能更强 
  • 支持主从集群、分布式 
  • 支持队列等特殊功能 
(3)MongoDB(Document-oriented)
  MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。
二、SQL组成
DML(数据操作语言)
  ——查询、插入、删除和修改数据库中的数据;
  ——SELECT、INSERT、 UPDATE 、DELETE等;
DCL(数据控制语言)
  ——用来控制存取许可、存取权限等;
  ——GRANT、REVOKE 等;
DDL(数据定义语言)
  ——用来建立数据库、数据库对象和定义其列
  ——CREATE TABLE 、DROP TABLE 等
TCL  (事务控制语句)
        变量说明、流程控制、功能函数
  ——定义变量、判断、分支、循环结构等
  ——日期函数、数学函数、字符函数、系统函数等
三、基本SQL语句
3.1.增操作
1.创建基本表
Create table 表名(列名,数据类型 [列级完整性约束])
2. 插入一行数据
Insert into <表名[<属性列1>…]>
values(<常量1>,<常量2>……),()……..
3. 增加一列
Alter table 表名    
Add <列名> <数据类型> [列级完整性约束] /*新增一列*/
注意:不管原来表中是否有数据,新增列的值均为Null
3.2 删操作
1.删除基本表
命令基本格式:Drop table <表名>
2 清空表数据
  • Delete from <表名>
  • Truncate table <表名>
3.删除某一行
delete from <表名>
where name='ming'
4.删除某一列
alter table <表名>
drop column sex
 3.3 改操作
1.改列数据
Update <表名>
Set <属性名1> = value1,<属性名2> = value2…….
Where 更新条件
 
3.4 查
1 选出表中的若干列
Select <列名1>,<列名2>…
From <表名>
2 查询全部列
Select * from <表名>
3 取消重复行(通过关键字distinct)
Select distinct Sno from Student
若果没有指明 distinct关键字,则默认为all,即显示全部结果
4 根据指定条件查询
Select <列名1>,<列名2>
From 表名
Where 查询条件

常用查询条件
比较 >< =、=>、!=、<>、!>(不大于)
确定范围 between and/not between and
空值判断 is null /is not null
多重条件 and/or/not
确定集合 in/not in
字符匹配(通过Like关键字实现) % :匹配任意多个字符       _: 任意单个字符

5. order by
Order by 列名 [ASC(升序,默认值)|DESC(降序)]
6. group by
Select <列名1>,<列名2>…. From <表名>
Group by <列名>
Having 聚合函数
注意:select 后面跟的列名必须出现在Group by字句或聚合函数中
聚合函数(即对排序或分组后的集合进行处理):
Count([Distinct|ALL]*) 统计元组个数
Count([Distinct|All<列名>]) 统计一列中值的个数
SUM([Distinct|ALL]<列名>) 统计一列中值的总和
AVG([Distinct|ALL] <列名>) 统计一列值的平均值
Max([Distinct|ALL])/Min([Distinct|ALL]) 求一列中的最大值/最小值
 
四、添加约束
约束目的:保证数据的完整性和有效性
约束分为如下几种:
1.主键约束:唯一非空  primary key PK_
  一个表里面只能存在一个主键,允许存在两列作为一个主键
2.默认约束:默认值 default key DK_      当不填数据时默认采用设定好的值
3.唯一约束:数据不重复,允许一行数据为空 Unique Key 唯一允许一个为空
4.检查约束:用来检查填入的数据是否满足要求 Check Key
5.非空约束:不能为空 not null
6.外键约束:外键指的是,表A中的id为主键,但在表B中id不是主键,表A的id就是表B的id外键。
外键语法:
alter table 表名
add constraint FK_字段名--"FK"为外键的缩写
foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 
2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。 

添加约束有三种方式,分别是建表中(在列名中添加和不在列名中添加),建表后
create table dome5
(
sid  smallint primary key,
sname nchar(10) not null default 'zhangsan',
saddre nvarchar(20),
sage tinyint unique key,
semail  char(20) check (semail like '%@%.%'),
createtime datetime  default getdate()
)
 
五、SQL函数
SQL函数分为五类,字符串函数,日期函数,数学函数,系统函数,聚合函数
select len('yihuqingjiu')
select getdate()
select abs(-1025)
select convert(nchar(3),123)
聚合函数需要和分组group by一起使用
例:
select avg(成绩)
from student
group by 科目
 
六、高级查询
6.1 子查询
子查询分为四种,where子查询、from子查询、in子查询和exists子查询
where子查询是将一个查询的结果作为另一个查询的条件
from子查询是将一个查询的结果作为另一个查询的来源(表)
in子查询是指要查询的数据包含其中
exists子查询是判断某数据是否存在
6.2 集合查询
Select语句查询的结果是元组的集合,多个集合可以进行结合操作,集合的操作包括并操作(Union)、交操作(INTERSECT)、差操作(EXCEPT)
 
 
七、视图
视图是从一个或多个基本表(或视图)导出的表。但它与基本表不同,数据库中值存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的表中。
视图的作用:
  1. 视图机制使用户可以将注意力集中在所关心的数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使得数据库看起来结构简单、清晰,并且可以简化用户的数据查询操作。
  2. 视图可以使用户以多种角度看待同一数据
  3. 视图对重构数据库提供了一定程度的逻辑独立性
  4. 因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据
  5. 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性
7.1 建立视图
Create View <视图名> [<列名1>,[列名2]。。。]
//属性列名要么全指定,要么全不指定,第二种情况下,视图的属性列名由子查询中select字句中目标列中的诸字段组成
As 子查询//任意的select语句
7.2 删除视图
Drop view 视图名 [Cascade]
如果该视图上还导出了其它视图,则指明CASCADE删除,则删除该视图时,会一并删除所有导出的视图
7.3 查询视图(与表查询类似)
7.4 更新视图(与更新表类似)
 
八、存储过程
存储过程是一组为完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过制定存储过程 的名字并给出参数来执行它,通常状况下将功能很复杂的语句编写为存储过程。
(1)可以在单个存储过程中执行一系列SQL语句
(2)可以从自己的存储过程中引用其他存储过程
(3)存储过程运行并保存在服务器中
(4)存储过程具有安全特性和所有权特性,可以附加到他们的证书
(5)存储过程可以强制应用程序的安全性
语句格式
Create proc 存储过程名 AS 相关操作 go
exec 存储过程名
九、触发器
触发器是一种特殊的存储过程。
触发器主要是通过事件进行触发而被自动执行的,而存储过程可以通过存储过程名字而被直接调用。
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性,另外还有强化约束和级联运行的功能。
 
参考:https://www.cnblogs.com/hong-fithing/p/7631773.html

推荐阅读