1、數據庫簡介
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是一個介於關係型數據庫和非關係型數據庫之間的產品,是非關係型數據庫當中功能最豐富,最像關係數據庫的。
2、SQL組成
DML(數據操做語言)
——查詢、插入、刪除和修改數據庫中的數據;
——SELECT、INSERT、 UPDATE 、DELETE等;
DCL(數據控制語言)
——用來控制存取許可、存取權限等;
——GRANT、REVOKE 等;
DDL(數據定義語言)
——用來創建數據庫、數據庫對象和定義其列
——CREATE TABLE 、DROP TABLE 等
TCL (事務控制語句)
變量說明、流程控制、功能函數
——定義變量、判斷、分支、循環結構等
——日期函數、數學函數、字符函數、系統函數等
3、基本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]) 求一列中的最大值/最小值
4、添加約束
約束目的:保證數據的完整性和有效性
約束分爲以下幾種:
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()
)
5、SQL函數
SQL函數分爲五類,字符串函數,日期函數,數學函數,系統函數,聚合函數
select len('yihuqingjiu')
select getdate()
select abs(-1025)
select convert(nchar(3),123)
聚合函數須要和分組group by一塊兒使用
例:
select avg(成績)
from student
group by 科目
6、高級查詢
6.1 子查詢
子查詢分爲四種,where子查詢、from子查詢、in子查詢和exists子查詢
where子查詢是將一個查詢的結果做爲另外一個查詢的條件
from子查詢是將一個查詢的結果做爲另外一個查詢的來源(表)
in子查詢是指要查詢的數據包含其中
exists子查詢是判斷某數據是否存在
6.2 集合查詢
Select語句查詢的結果是元組的集合,多個集合能夠進行結合操做,集合的操做包括並操做(Union)、交操做(INTERSECT)、差操做(EXCEPT)
7、視圖
視圖是從一個或多個基本表(或視圖)導出的表。但它與基本表不一樣,數據庫中值存放視圖的定義,而不存放視圖對應的數據,這些數據仍存放在原來的表中。
視圖的做用:
- 視圖機制使用戶能夠將注意力集中在所關心的數據上。若是這些數據不是直接來自基本表,則能夠經過定義視圖,使得數據庫看起來結構簡單、清晰,而且能夠簡化用戶的數據查詢操做。
- 視圖可使用戶以多種角度看待同一數據
- 視圖對重構數據庫提供了必定程度的邏輯獨立性
- 由於隱藏了底層的表結構,因此大大增強了安全性,用戶只能看到視圖提供的數據
- 使用視圖,方便了權限管理,讓用戶對視圖有權限而不是對底層表有權限進一步增強了安全性
7.1 創建視圖
Create View <視圖名> [<列名1>,[列名2]。。。]
//屬性列名要麼全指定,要麼全不指定,第二種狀況下,視圖的屬性列名由子查詢中select字句中目標列中的諸字段組成
As 子查詢//任意的select語句
7.2 刪除視圖
Drop view 視圖名 [Cascade]
若是該視圖上還導出了其它視圖,則指明CASCADE刪除,則刪除該視圖時,會一併刪除全部導出的視圖
7.3 查詢視圖(與表查詢相似)
7.4 更新視圖(與更新表相似)
8、存儲過程
存儲過程是一組爲完成特定功能的SQL語句集,經編譯後存儲在數據庫中,用戶經過制定存儲過程 的名字並給出參數來執行它,一般情況下將功能很複雜的語句編寫爲存儲過程。
(1)能夠在單個存儲過程當中執行一系列SQL語句
(2)能夠從本身的存儲過程當中引用其餘存儲過程
(3)存儲過程運行並保存在服務器中
(4)存儲過程具備安全特性和全部權特性,能夠附加到他們的證書
(5)存儲過程能夠強制應用程序的安全性
語句格式
Create proc 存儲過程名 AS 相關操做 go
exec 存儲過程名
9、觸發器
觸發器是一種特殊的存儲過程。
觸發器主要是經過事件進行觸發而被自動執行的,而存儲過程能夠經過存儲過程名字而被直接調用。
觸發器的主要做用就是其可以實現由主鍵和外鍵所不能保證的複雜的參照完整性和數據的一致性,另外還有強化約束和級聯運行的功能。
參考:https://www.cnblogs.com/hong-fithing/p/7631773.html