資料庫-基礎概念

来源:https://www.cnblogs.com/yangyuanhu/archive/2019/07/10/11161514.html
-Advertisement-
Play Games

一.認識資料庫 1.什麼是資料庫? 資料庫就是存儲數據的倉庫 存儲數據的方式1 存儲數據的方式2 電腦的性能進行擴展 訪問不同電腦上的文件數據 2.常見資料庫 關係型資料庫 資料庫可以為數據與數據之間建立關聯關係,人是一條數據,他可能關聯著一個工作崗位數據。雙方可以通過自身找到對方。 非關係型 ...


一.認識資料庫

1.什麼是資料庫?

資料庫就是存儲數據的倉庫

存儲數據的方式1

"""
第一天就學習了一種存儲數據的方式 就是變數 然而變數的存儲介質是記憶體,記憶體中的數據在斷電後就消失了,無法永久保存
很明顯這是不行的 ,比如用戶剛剛註冊成功的用戶名密碼必須要永久。
"""

存儲數據的方式2

"""
使用文件來存儲數據就可以實現永久存儲,但是文件是存儲於硬碟上的,首先要考慮的就是效率問題一個應用程式之所以效率低就是因為IO操作太多。
另外還需要考慮一個問題:
不可能所有組件運行在同一臺電腦上為什麼?
一臺電腦的性能總歸有上限  例如淘寶雙11 雙12  用一臺電腦來做伺服器的 配置再高都肯定吃不消,那怎麼辦?
"""

電腦的性能進行擴展

"""
1.垂直擴展
不斷的提升硬體性能  不可取

2.橫向擴展 (分散式計算)
添加更多的電腦 將程式的不同組件分別運行在不同的電腦上
帶來的優點:
性能提高 穩定性提高(可拔插式)
現在性能問題已經解決了 通過分散式的方式
但是這些組件雖然分佈在各個電腦上 但是它們還是一個整體
也就是說你操作的數據文件還是是同一份
預設情況下 程式能訪問的數據 但是只有當前電腦。
"""

訪問不同電腦上的文件數據

"""
如何能訪問別的電腦上的文件呢? 
只有一種辦法,通過網路 通過網路把你要什麼數據告訴伺服器 伺服器在通過網路把你要的數據發送給你,得需要使用socket ,需要配套的來一個伺服器端 和 客戶端程式,把客戶端程式分發給各個python程式 python程式通過客戶端來鏈接伺服器端 從而完成數據的讀寫

也就是說資料庫本質上就是一套C/S結構的TCP程式
我們完全可以自己來編寫這麼一套軟體,但是需要考慮一下幾個問題

1.socket需不需實現併發? 必須要
2.既然是併發 還要考慮線程安全問題?     需要給文件操作加鎖 
3.是不是任何電腦請求鏈接我都要接受呢? 不是需要進行用戶認證 
4.單純的對本地電腦上的數據進行讀取 速度都是非常慢的硬碟上的數據有尋道定址時間 平均延遲時間,速度太慢! 要想辦法提高數據的存取效率,通過索引。

到現在我們知道了要開發一款應用程式必須先解決上述四個問題,但是對於每一個公司而言,開發周期是非常重要的,不可能為了開發應用程式而先花大把時間來編寫資料庫程式,這便產生了專門的資料庫軟體廠商。寫出了專門的資料庫軟體。

2.常見資料庫

關係型資料庫

資料庫可以為數據與數據之間建立關聯關係,人是一條數據,他可能關聯著一個工作崗位數據。雙方可以通過自身找到對方。

"""
mysql 免費開源 支持中大型企業
    為了防止mysql被閉源 以及 擔心oracle的優化能力
    創始人Widenius 另起竈爐  開發了mariaDB  mariaDB 完全相容mysql 使用起來        一模一樣    
    mysql的一生 坎坎坷坷 先後被 sun   - oracle收購
oracle 收費閉源 功能強大 分散式資料庫 
SQLServer  微軟生態圈 僅支持 windows系統  太局限  
DB2 IMB 開發的資料庫軟體 收費閉源  經常與IMB的機器綁定銷售  打折啥的

非關係型

通關key value存儲數據各個數據之間沒有關係 不是通用性資料庫 有局限性,通常將數據存儲在記憶體中,以提高速度,所以非關係性資料庫多用於緩存,與關係型資料庫搭配使用。

"""
MongoDB
redis
memcache

總結: 我們通常說的資料庫就是一套軟體 有服務端和客戶端 用來操作伺服器端上的文件

3.資料庫相關概念

"""
數據:
    用於記錄事物的狀態信息 可以是數字  字元  聲音 圖像等等 
    如name = jerry

記錄:
    一條記錄用於保存一個事物的典型特征  就相當於文件中的一行
    如jerry,180,man,帥

表:
    本質就是一個文件,創建表的時候其實就是在創建一個文件 ,可以在資料庫目錄下看到
    可不可能把所有數據全放到同一個文件里?
    為了降低耦合性 方便管理 都應該把數據分門別類 放到不同文件中 

庫:
    就是一個文件夾

DBMS:   
    資料庫管理軟體 就是一個套接字伺服器端軟體

資料庫伺服器:
    運行有資料庫管理軟體的電腦
    在公司我們開發者關心的部分是哪些?
    從庫往上的需要我們關心  DBMS 和 伺服器是運維關心的

二.安裝mysql

1.下載安裝包

下載地址:https://dev.mysql.com/downloads/mysql/

下載的時候提供了帶界面的和不帶界面的 用哪個呢?

伺服器通常是不帶界面的linux系統,並且熟練掌握SQL語句通常是面試官的基本要求

此處安裝解壓版的,下載對應的32/64位壓縮包,解壓到指定位置即可。

2.mysql目錄解析

"""
bin             執行文件
mysqld          伺服器主程式
mysql           無界面的客戶端
data            數據文件
my-default.ini  配置文件模板

3.啟動mysql伺服器

註意:5.7後的版本需要先初始化 執行:mysqld --initialize-insecure

'''
啟動伺服器
    1.運行CMD,通過cd 進入bin目錄    
    2.執行mysqld就可以啟動伺服器,如果報錯的話使用管理員許可權來運行CMD
    這是一個socket伺服器程式 這時候相當於做了一下事情:
    啟動伺服器socket 並監聽埠 預設綁定當前ip 埠預設3306
    
啟動客戶端
    運行mysql 註意他是一個socket程式 要連接伺服器需要ip 和 埠
    mysql  -h ip -P port -uroot -p  密碼預設為空
看到歡迎界面則說明socket鏈接成功了

執行過程分析:
    這個命令提示符本質是什麼?
    就是一個input
    接受一條指令然後發送給伺服器 
    伺服器接收到之後呢解析指令 
    取出你要的數據在send給客戶端
那問題來了 指令肯定不能隨便寫,不然伺服器不認識,大家必須得有套規範
    就是sql 語句
    sql全稱為 結構化查詢語言,是所有非關係型資料庫都支持的語言,學習資料庫很大一部分時間是在學習sql語句。
    
登錄成功後可以執行一下命令來查看所有存在的資料庫
show databases;
對比data文件夾來看

那在講命令之前呢 思考一下 我們每次要使用mysql都得先cd到這個目錄中非常麻煩

怎麼解決呢?

4.加到環境變數

找到安裝目錄,將bin路徑複製填入系統設置的path中即可
命令總結:

mysqld #啟動伺服器
啟動客戶端 #mysql -h -P -u -p 本機簡寫 mysql -u -p

#關閉伺服器
tasklist | findstr mysqld
taskkill  /F /PID  8372

也可以直接退出CMD

5.註冊系統服務

伺服器的啟動和關閉都需要執行命令 還是不夠方便 怎麼辦呢?

'''
將mysql註冊到系統服務中  mysqld --install  
需要註意的是 預設註冊的服務名稱叫做mysql 這與bin下的mysql是兩碼子事,一個系統服務一個是客戶端執行文件

刪除服務 sc delete mysql(服務名)

查看系統服務 運行->services.msc 
通常設置為自動啟動。

如果註冊系統服務失敗則可能是因為你之前安裝過mysql 卸載重裝即可。

界面版的安裝失敗也可能是之前安裝了,導致埠占用。

三.修改管理員密碼

現在密碼預設為空 這樣是不安全的
萬一誰過來把你數據刪了 怎麼辦? 

#修改密碼
在知道原始密碼的情況下可以使用mysqladmin
mysqladmin是一個用於管理資料庫的程式,包括修改密碼,數據備份等
修改密碼:
    mysqladmin  -uroot -p舊密碼 password 123
    警告忽略即可

#破解密碼:
萬一你不小心把密碼忘記了怎麼辦? 到公司不可能卸載重裝
這個密碼它肯定要找地方存儲起來 ,那存客戶端還是伺服器呢?
伺服器 ,那存在記憶體還是硬碟呢? 必然是硬碟,既然如此,一定有一文件用於存放密碼信息

#方式1:刪除用於記錄用戶密碼數據文件
沒問題 簡單粗暴 但是,這個文件里不只有你的賬號信息 還有別人賬號數據 還有授權相關的數據
所以你最好不要這麼乾!
那你在思考一下,伺服器驗證用戶的本質是什麼,是不是讀取一個文件的數據來和你輸入的數據進行對比,
那你可不可以這樣子 我告訴我伺服器說你不要去讀那個授權文件,可以!

#方式2: 跳過授權表 進入系統修改授權表推薦
跳過這個操作是伺服器相關的操作所以 咱的先關掉伺服器重新開 在重新開的時候來告訴它
1.停止服務
2.啟動伺服器並添加參數
**mysqld --skip-grant-tables**
3.使用客戶端登錄伺服器 執行修改命令 此時不需要輸入密碼
update mysql.user set password = password("123123") where user="root" and host="localhost"**
4.刷新許可權
flush privileges
5.命令行中重啟伺服器驗證新密碼

四 編碼設置

使用客戶端執行\s 可以查看當前伺服器的設置信息
latin1 gbk 就是預設的編碼。 伺服器是拉丁 客戶端是 GBK 
很顯然要亂碼,我們必須保證編碼方式一致!

如何設置:
在mysql安裝目錄下有個my_default.ini  他就是配置文件,但是他不是正在使用的
而是一個模板文件,我們如果要自己編寫配置文件,需要自己複製一個叫做my.ini的文件來編寫
編寫格式我們已經學習過了
configpaser模塊  

[section]
option = value

要設置客戶端的內容就寫在mysql分區
要設置伺服器的內容就寫在mysqld分區下
mysql在啟動的時候會自動到安裝目錄下找my.ini文件 找到命令對應的標題載入裡面的設置項

測試:在配置文件中加入用戶名密碼配置

[mysql]
user = "root"
pasword = "123"

需要註意的是:mysql mysqld都會來讀取這個文件,對於客戶端和伺服器我們需要使用section來區分


# 伺服器配置部分
[mysqld]
character-set-server = utf8
# 客戶端mysql配置部分
[mysql]
default-character-set = utf8
# 其餘客戶端配置部分
[client]
default-character-set = utf8

註意:修改了mysqld配置需要重啟伺服器

五 mac配置

首先明確 配置文件編寫方式相同!

不同的在於:
    1.mysql的安裝路徑 mac預設無法修改
    位於:/usr/local  
    使用command + shift + g 來前往
    
    2.配置文件名稱為 my.cnf 需要放在

    
當出現問題無法修正時可以重裝mysql解決
mac徹底刪除mysql
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

windows刪除安裝目錄  刪除系統服務即可

六 基本sql語句

1.庫相關 文件夾

增 
create database mydb charset utf8;

查  
show databases;
show create databases mydb;

改
alter database mydb charset gbk

刪
drop database mydb;

2.表相關 文件


切換文件夾 (選擇資料庫)
use mydb;

增
create table t1 (id int,name char)

查
show tables;
show create table t1;
desc t1;

改
改欄位
alter table 表名 add | modify | drop | change  
add  跟 列名和類型
modify 跟 列名 和 類型
drop 跟列名
change 跟 舊列名  新列名 類型

改字元編碼
alter table 表名 default character set gbk

改名稱
rename table tname1 to tname2

刪
drop table 表名

3.記錄相關 一行數據

增 
insert into tablename values(data,....),(data)...

查 
select id,name from t1;     
列名可用*號表示通配符

改
update 表名 set 列名 = 值 where 條件; 
可同時修改多個欄位,用逗號隔開  列名=值,列名=值...
沒有條件則修改全部
    
刪
delete from 表名 where 條件;
沒有條件則刪除所有;

重建表,清空所有數據;
truncate table t1;

七 相關規範

欄位名 表名 庫名

由 數字 字母 @ $ # _ 組成

不能純數字

不能是mysql關鍵字 如int

八 表的分類(數據存儲引擎)

什麼是引擎?
如汽車的發動機
引擎就是一個系統的核心部分

為什麼需要分類呢?
發動機分類呢?
分柴油 汽油 電動

各自的使用場景不同
mysql支持的引擎
show engines

不同引擎效果測試 插入數據

20180522111034300

mysql系統架構圖

截圖.png

5.6 與 5.7對比

1.需要初始化 mysqld --initialize-insecure

2.密碼欄位變成了authentication_string

3.界面安裝的配置文件放到了C:\ProgramData中


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] 壓縮打包 壓縮打包介紹 ​ windows .rar Linux`有自己所特有的壓縮工具。 如果希望windows和Linux互相能使用的壓縮工具, 建議 格式 壓縮的好處主要有: 節省磁碟空間占用率 節省網路傳輸帶寬消耗 網路傳輸更加快捷 類型 | 格式 | 壓縮工具 | | | | ...
  • 一、中間件簡介 1、基礎概念 ElasticSearch是一個基於Lucene的搜索伺服器。它提供了一個分散式多用戶能力的全文搜索引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。 2、分散式數 ...
  • 一、在Oracle官網下載尾碼為:tar.gz的linux版本JDK。 二、解壓縮到:/opt/JDK目錄下。 三.通過終端執行:sudo vim /etc/profile 執行後按“i”進行編輯,在最後添加。 四、按ESC接Shift+zz保存退出。 五、執行: 安裝成功了! ...
  • 軟體相容性的定義及操作系統對比: 向上(下)相容指的是按某檔機器編製的軟體,不加修改就能運行於比它高(低)檔的機器上。 向前(後)相容指的是按某個時期投入市場的該型號機器上編製的軟體,不加修改就能運行於比它前(後)投入市場的機器上。 目前市面上流行的操作系統有:windows、linux、mac、a ...
  • Question:最近在搞linux下的一個客戶端項目,需要接收鍵盤事件,但是又不能有界面,這種情況怎麼處理呢? 1、首先需要在main方法中註冊,使用installEventFilter方法把這個類的指針傳進去 2、在Test類中重寫eventFilter方法,這樣就可以進行監聽了 3、在even ...
  • 1、臨時IP配置 # ifconfig eth0 192.168.110.118 netmask 255.255.255.0 gateway 192.168.110.2 up # ifconfig eth0 192.168.110.118/24 up # ifconfig eth0:1 192.16 ...
  • 1. Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host' ...
  • 《SQL Server溫故系列》之分組查詢 GROUP BY。GROUP BY 是一種能將查詢結果劃分為多個行組的查詢語句的子句,其目的通常是為了在每個組上執行一個或多個聚合運算,所以 GROUP BY 通常會與聚合函數一塊兒出現在查詢語句中。本文主要講述了 SQL Server 中 GROUP B... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...