日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

[别被脱库]—数据库的初恋~

發布時間:2024/9/15 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [别被脱库]—数据库的初恋~ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此數據庫系列,是學習工作中的總結,具體章節系列如下圖所示。如果您需要掃盲數據庫,突擊數據庫的面試,那就盤他,盤他!所謂初戀,初次見面,下凡數據庫基礎。請多多關照!

童鞋別被脫褲系列

這是系列篇第一節,其主要內容如下思維導圖所示。如太簡單,文末在看走起!

數據庫基礎

1 了解sql----長生不老,異常穩定

查看近幾年的TIOBE發現了,一直在前十,可見是個老且管用的東西。

來自網絡

了解幾個術語:

  • DDL(Data Definition Language),定義數據庫對象。

  • DML:(DATA Manipulation Language),用來操作和數據庫相關記錄。

  • DCL:(Data Cnotrol Language)定義訪問權限和安全級別。

  • DQL(Data Query Language)。查詢記錄。

sql大小寫規范

  • 表名、表別名、字段名、字段別名等可以小寫

  • SQL保留字,函數名,綁定變量大寫

SELECT name,age FROM student WHERE id="1";

2 為啥要存儲數據

我們大部分的系統都會考慮到數據的存儲,那么如何更有效地保存好數據,做好數據備份。當我們擁有了數據,可以進行數據挖掘,大數據分析,輿情預測,自然語言處理等等一系列的騷操作,可見存儲數據是多么的重要。這一篇文章對數據庫基礎知識的掃盲,下一節將是數據存儲,數據備份等。另外我必須要知道硬盤的處理速度比cpu,內存,網卡都會慢喲。

3 DBMS是什么

  • DB、DBS和DBMS區別


全稱功能
DBMSDataBase Management System可對多個數據庫進行管理
DBDataBase存儲數的集合,理解為多個數據表
DBSDataBase system老大哥。包含了數據庫管理系統和數據庫管理人員DBA

4 當前主流的DBMS有哪些

主流的DBMS

5 sql與Nosql

Nosql的Timestamp:

1970:Nosql=we have no sql

1980:Nosql=know sql

2000:Nosql=No SQL

2005:Nosql=not only sql

2013:Nosql=No,SQL

鍵值數據庫

通過key-value方式存儲,key為唯一表示,優點,查詢快,缺點是無法像關系型數據庫一樣使用條件過濾,這樣可能導致遍歷所有的鍵,消耗大量的計算。所以經常用來作為緩存,比如redis。

文檔數據庫

管理文檔,一個文檔相當于一條記錄,MongoDB。

搜索引擎

雖然關系型數據庫常常通過索引的方式提高檢索效率(不一定),但是對于全文檢索卻比較低。搜索引擎的優勢比如Elasticsearch、Splunk和Solr采用全文搜索,核心原理為倒排索引

列式數據庫

相對于行式數據庫,將數據按照列存儲,這樣可以大量降低系統的IO(因為相鄰的數據類型一樣,方便壓縮,自然就會降低IO),適合分布式文件系統,比如

圖數據庫

典型的就是網絡中的人與人的關系,節點和邊關系。

6 Oracle中的sql如何執行的

查詢執行流程
  • 語法檢查:檢查SQL拼寫是否正確。

  • 語義檢查:檢查SQL訪問對象是否存在。

  • 權限檢查:檢查用戶是否有訪問權限。

  • 共享池檢查:包含了庫緩存、數據字典緩沖區等。主要用來緩沖執行計劃或者表、視圖等對象。

  • 優化器:進行硬解析,決定創建解析樹和生成執行計劃應該怎么做

  • 執行器:有了優化器,那么在執行器思考如何被執行

7 mysql中sql如何執行的

查詢執行流程
  • 查詢緩存

首先注意,mysql8.0之后已經放棄了這個功能(因為如果數據更新,緩存會清空,如果為動態數據經常更新,這樣反而增加SQL查詢時間)。緩存通常的理解是一個中間層,如果在中間層存在查詢語句就直接返回,如果沒有則給解析器處理。

  • 解析層

主要進行語法分析和語義分析。

  • 優化器

確定SQL語句的執行路徑。是根據全表檢索還是根據索引。

  • 執行器

進行權限檢查。

那么mysql和oracle兩者執行情況有啥不一樣呢

MySql具有多種存儲引擎且可以自定義存儲引擎,那么有哪些存儲引擎,優點缺點是啥?


描述
InnoDBMysql5.5以后默認存儲引擎,支持事務,行級鎖,外鍵約束
MyISAMMysql5.5以前為默認存儲引擎,不支持事務和外鍵,最大特點速度快,占資源少
Memory存儲引擎使用系統內存為存儲介質,更快的響應速度。
NDB存儲引擎用于Mysql Cluster分布式集群環境
Archive存儲引擎壓縮機制的特點便于文件的歸檔,常用來做倉庫

8 如何查看一條sql的資源使用情況

  • prifiling是否開啟

mysql> select @@profiling;如果為0代表關閉,設置為1表示打開。

  • 執行sql查詢語句

mysql> select *from student;

  • 查看當前所有profiles

show profiles;查看當前會話的profiles

  • 查看執行時間show profile

9 DDL

  • 創建數據庫

  • 創建公眾號原創作者數據庫

CREATE DATABASE WeChat_Official_Account_Author;

  • 創建表結構(注意語句最后;結束,最后一個字段定義結束沒有逗號)

CREATE TABLE authors_name(author_id int(15) NOT NULL AUTO_INCREMENT),author_name varchar(255) NOT NULL);

  • 添加字段

ALTER TABLE ?authors_name ADD(age int(12));

  • 修改字段名

ALTER TABLE authors_name RENAME_COLUME age to author_age;

  • 刪除字段

ALTER TABLE author_names DROP COLUME author_age;

10 數據庫的常見約束

不成規矩,不成方圓

  • 主鍵約束

唯一標識一條記錄,不重復且不能為空(UNIQUE+NOT NULL)。主鍵可以使是一個字段或者多個字段的組合,一個數據表主鍵只能有一個

  • 外鍵約束

外鍵確保表與表之間引用的完整性。外鍵可以重復也可以為空。

  • 唯一性約束

字段在表中可以使唯一的。

  • NOT NULL約束

表明字段不應為空,必須有取值。

  • CHECK約束

檢查特定字段取值范圍的有效性

11 常見查詢語句

  • 查詢姓名列

  • 查詢單列和查詢多列

SELECT author_name FROM authors_name;

SELECT * FROM authors_name;

  • 去除重復行

SELECT DISTICT age ? FROM authors_name;

  • 查詢排序(ASC 遞增排序,DESC遞減排序)

SELECT ?author_name FROM authors_names ORDER BY age DESC;

  • 約束返回結果的個數(返回5條數據 LIMIT需要放在最后)

SELECT ?author_name FROM authors_names ORDER BY age DESC LIMIT 5;

  • SELECT語句中關鍵字順序

關鍵字的順序:SELECT…..FROM…WHERE…GROUP BY

  • SELECT語句的執行順序

FROM>WHERE>GROUP BY HAVING>SELECT

  • 那么一句select的執行順序原理是什么?請看下圖。

一句select經歷了啥

12 sql運算符

  • 比較運算符(不同的DBMS支持的運算符可能不同)

比較運算符
  • 邏輯運算符

邏輯運算符

當WHERE字句中同時出現OR和AND的時候,AND執行優先級會更高。一般來說()優先級最高,其次是AND,然后是OR。

  • 通配符過濾

通配符是對文本類型進行模糊查詢,但是通常是全表掃描,所以效率很低。只有當LIKE后面沒有通配符,并對字段進行索引的時候不會進行全表掃描。匹配一部分特殊字符。"LIKE"操作符。

  • 通配符匹配之任意字符串出現的任意次數(%)

  • 通配符匹配之耽擱字符(_)

13 常見sql函數

提供函數,類似接口,更方便快速的得出想要的結果。


描述例子
ABS()取絕對值SELECT ABS(-5)---5
MOD()取余SELECT MOD(101,3)---2
ROUND()四舍五入為指定的小數位數,如果兩個參數,分別為字段名稱和小數位數SELECT ROUND(38.29,1)--38.3
LENGTH()計算字段長度。一個漢字三個字符。SELECT LENGTH('小藍')--6
UPPER()字符轉大寫SELECT LOWER('qwe')--QWE
LOWER()字符轉小寫SELECT LOWER('QWE')--qwe
REPLACE()替換函數SELECT REPLACE('QWE123D','QWE',789)--789123D
SUBSTRING()截取字符串SELECT SUBSTRING('QWE123',1,3)--
CHAR_LENGTH()計算機字段的長度,漢字,數字都算一個字符SELECT CHAR_LENGTH('小藍')--2
CONCAT()連接字符串SELECT CONCAT('XIAOLAN',789)---XIAOLAN789
DATA()返回時間的日期SELECT DATA('2020-03-13 11:30:20')--2020-03-13
YEAR()/MONTH()/DAY()返回時間的年份/月份/天數SELECT YEAR(NOW())--2020
HOUR()返回時間的小時SELECT hour('12:13:14')--12
MINUTE()返回時間的分鐘SELECT MINUTE('12:13:14')--13
SECOND()返回時間的秒部SELECT SECOND('12:13:14')--14
CURRENT_DATE()系統當前日期SELECT CURRENT_DATE('2020-03-13 11:30:20')--2020-03-13
CURRENT_TIME()系統當前時間,沒有具體日期SELECT CURRENT_TIME('2020-03-13 11:30:20')--11:30:20
CURRENT_TIMESTAMP()日期+時間SELECT CURRENT_TIMESTAMP--2020-03-13 11:30:20

14 聚集函數


描述例子
COUNT()總行數,不管某個字段是否為NULLSELECT COUNT(*) FROM authors_name WHERE age>25
MAX()最大值SELECT MAX(Age) ?FROM authors_name
MIN()最小值SELECT MIN(Age) ?FROM authors_name
SUM()求和SELECT SUM(Age) ?FROM authors_name
AVG()平均值SELECT AVG(Age) ?FROM authors_name
  • 數據分組

使用GROUP BY字句進行數據分組。

  • HAVING過濾分組和WHERE的區別

WHERE 是用于數據行,而 HAVING 則作用于分組。如果分組完以后需要排序,就在其后增加ORDER BY完成

17 視圖

  • 什么是視圖

視圖可以理解為一個中間表(結果集),咋們叫虛擬表,它主要把我們經常查詢的結果存放于中,從而提升使用的效率。本身不具有數據。

  • 為什么使用視圖

重用SQL語句

使用表的一部分而不是整個表

更改數據格式和表示。

通過授予表的特定訪問權限來保護數據

  • 使用視圖過濾不想想要的數據

  • 更新視圖

18 事務處理

要么完全執行,要么不執行。

  • A(Atomicity)原子性。不可分割,進行數據處理的基本單位。

  • C(Consistency)一致性。在進行事務操作以后,會從一致的狀態變為另一種一致的狀態。即使事務回滾也不能被破壞。

  • I(Isolation)隔離性。事務的獨立性。一個事務在提交之前,對其他的事務不可見。

  • D(Durability)持久性。通過事務日志保證。即使系統崩潰,通過數據庫日志的更新讓系統恢復到最后一次成功的更新狀態。

19 事務隔離

我們知道當在高并發的情況下,這個時候需要較高的吞吐量,那么采取方式之一就是將原來的串行操作變化為并行。這個時候可以通過降低數據庫的隔離標準,來換取事務的并發能力。

講述相關內容之前,我們先定義一個表如下。

IDAgeName
118小藍
219小林
320小旋
  • 臟讀

小藍今天想去看看數據庫內容,并想把朋友小地增加到數據庫中,于是操作如下:

SQL>?BEGINT: SQL>?INSERT?INTO?authors?value(4,20,"小地");

此時小藍還沒有提交這個事務,小林去訪問了這個表(小林去年買了個表,哈哈哈嗝),于是

SQL>SELECT?*?FROM?authors;

然后得到這個結果:

IDAgeName
118小藍
219小林
322小旋
420小地

結論:小藍還沒有提交事務,小林訪問卻看到了增加的小地,這就是臟讀。

  • 不可重復讀

小藍聽說小地也在表里,然后想看看是為何人如此牛掰,幾歲了?

SQL>?SELECT?Age?FROM?authors?where?Name="小地"

結果如下:

Age
20

我的天,這么年輕?小藍試圖用個事務去修改其年齡

SQL>BEGIN; SQL>UPDATE?authors?SET?Age?=?25?where?Name='小地'

此時小藍去查詢下修改是否成功

SQL>SELECT?Age?FROM?authors?where?Name='小地'

結果如下:

Age
25

牛掰,修改成功?那么問題來了,小藍雖然修改了,但是并沒有提交呀,這就是不可重復讀,兩次查詢出現了不同的結果。

  • 幻讀

今天小旋過來想看看,表里都有哪些小伙伴。

SQL>?SELECT?*FROM?authors;

結果如下:

IDAgeName
118小藍
219小林
322小旋
420小地

這個時候小林遇到個小妹妹,發現其文采還不錯,開啟個事務將其放入表中。

SQL>?BEGIN; SQL>?INSERT?INTO?authors?values(5,'21','小魏')

小林記性太好了,于是還想看看到底有哪些人,

SQL>?SELECT?*?FROM?authors;

結果如下

IDAgeName
118小藍
219小林
322小旋
420小地
521小魏

啊!小林驚呆了,怎么多了個妹妹!!!這就是幻讀!

  • 隔離級別


臟讀不可重復讀幻讀
讀未提交允許允許允許
讀已提交禁止允許允許
可重復讀禁止禁止允許
可串行化禁止禁止禁止

總結下:

讀未提交:

允許臟讀,也就是可能讀取到其他會話中未提交事務修改的數據

讀已提交

只能讀取到已經提交的數據。Oracle等多數數據庫默認都是該級別 (不重復讀)

可重復讀

可重復讀。在同一個事務內的查詢都是事務開始時刻一致的,InnoDB默認級別。在SQL標準中,該隔離級別消除了不可重復讀,但是還存在幻讀

串行讀:

全串行化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞.

20 python如何操作oracle

簡單操作
  • 插入數據

插入數據
  • 查詢數據

查詢數據

21 初探調優

為什么調優,無非就是希望響應更快,吞吐量更大,用戶體驗更好。

那么怎么獲得反饋

  • 用戶

他們是直接體驗者,來的直接。

  • 日志匯聚分析,服務器監控,數據庫內部監控

通過性能工具進行查看,想起一張圖送給大家。

這里是性能指標圖

來自網絡

一般從哪幾個方面著手數據庫調優,總之沒有最好,只有更合適。

  • 前期DBMS的調研,選擇合適業務的DBMS

比如需要有事務處理能力,可以選擇mysql的InnoDB。如果采用如果考慮大幅度的降低系統IO,那么可以考慮Nosql中的列式數據庫,之前說過列式存儲方便使用壓縮,但是不適合頻繁的增刪改。

  • 選擇合適的緩存比如redis

將經常使用的數據放入緩存中(內存),提升查詢效率。

  • 庫級別的優化

主從架構優化讀寫策略,具體方法請關注系列篇第二節。

好了,上面的基礎部分學習應該差不多了,那么數據庫相關的優化,主從架構,讀寫分離,數據庫的分片等都是怎么樣的呢?盡請期待后續學習分享,一起成長!

參考鏈接:

http://www.redis.cn/

《mysql必知必會》

https://dev.mysql.com/doc/

https://blog.csdn.net/gengkui9897/article/details/89294936

《高性能mysql》

END 最后說個題外話,相信大家都知道視頻號了,隨著灰度范圍擴大,越來越多的小伙伴都開通了視頻號。小詹也開通了一個視頻號,會分享互聯網那些事、讀書心得與副業經驗,歡迎掃碼關注,和小詹一起向上生長!「沒有開通發布權限的盡量多互動,提升活躍度可以更快開通哦」(聽我一分鐘,生活更輕松)(掃碼回復 1024 即可領取IT資料包)

總結

以上是生活随笔為你收集整理的[别被脱库]—数据库的初恋~的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。