## 什麼是數據庫 ```python 數據庫就是存儲數據的 存儲數據的方式1: "第一天就學習了一種存儲數據的方式 就是變量 然而變量的存儲介質是內存,內存中的數據在斷電後就消失了,沒法永久保存很明顯這是不行的 ,好比用戶剛剛註冊成功的用戶名密碼必需要永久。 存儲數據的方式2: """使用文件來存儲數據就能夠實現永久存儲,可是文件是存儲於硬盤上的,首先要考慮的就是效率問題一個應用程序之因此效率低就是由於IO操做太多。 另外還須要考慮一個問題:不可能全部組件運行在同一臺計算機上爲何? 一臺計算機的性能總歸有上限 例如淘寶雙11 雙12 用一臺計算機來作服務器的 配置再高都確定吃不消,那怎麼辦?""" 1.垂直擴展 不斷的提高硬件性能 不可取 2.橫向擴展 (分佈式計算) 添加更多的計算機 將程序的不一樣組件分別運行在不一樣的計算機上 帶來的優勢: 性能提升 穩定性提升(可拔插式) 如今性能問題已經解決了 經過分佈式的方式 可是這些組件雖然分佈在各個計算機上 可是它們仍是一個總體 也就是說你操做的數據文件仍是是同一份 默認狀況下 程序能訪問的數據 可是隻有當前計算機。 ``` ## 2.常見數據庫 ```python #關係型數據庫 :本質上,數據類型是有約束的. 據庫能夠爲數據與數據之間創建關聯關係,人是一條數據,他可能關聯着一個工做崗位數據。雙方能夠經過自身找到對方。 mysql 免費開源 支持中大型企業 爲了防止mysql被閉源 以及 擔憂oracle的優化能力 創始人Widenius 另起竈爐 開發了mariaDB mariaDB 徹底兼容mysql 使用起來 如出一轍 mysql的一輩子 坎坎坷坷 前後被 sun - oracle 收購 oracle 收費閉源 功能強大 分佈式數據庫 SQLServer 微軟生態圈 僅支持 windows系統 太侷限 DB2 IBM 開發的數據庫軟件 收費閉源 常常與IMB的機器綁定銷售 打折啥的 # 非關係型:數據類型無約束. 通關key value存儲數據各個數據之間沒有關係 不是通用性數據庫 有侷限性,一般運行在將數據存儲在內存中,以提升速度,因此非關係性數據庫多用於緩存,與關係型數據庫搭配使用。 MongoDB redis memcache ``` ## 3,數據庫的相關概念 ```python 數據: 用於記錄事物的狀態信息 能夠是數字 字符 聲音 圖像等等 如name = jerry 記錄: 一條記錄用於保存一個事物的典型特徵 就至關於文件中的一行 如jerry,180,man,帥 表: 本質就是一個文件,建立表的時候其實就是在建立一個文件 ,能夠在數據庫目錄下看到 可不可能把全部數據全放到同一個文件裏? 爲了下降耦合性 方便管理 都應該把數據分門別類 放到不一樣文件中 庫: 就是一個文件夾 DBMS: 數據庫管理軟件 就是一個套接字服務器端軟件 數據庫服務器: 運行有數據庫管理軟件的計算機 在公司咱們開發者關心的部分是哪些? 從庫往上的須要咱們關心 DBMS 和 服務器是運維關心的 ``` ## 啓動mysql服務器: ```python 啓動服務器 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.加到環境變量 ```python 找到安裝目錄,將bin路徑複製填入系統設置的path中便可 命令總結: mysqld #啓動服務器 啓動客戶端 #mysql -h -P -u -p 本機簡寫 mysql -u -p #關閉服務器 tasklist | findstr mysqld taskkill /F /PID 8372 也能夠直接退出CMD ``` ## 5.註冊系統服務 服務器的啓動和關閉都須要執行命令 仍是不夠方便 怎麼辦呢? ```python ''' 將mysql註冊到系統服務中 mysqld --install 須要注意的是 默認註冊的服務名稱叫作mysql 這與bin下的mysql是兩碼子事,一個系統服務一個是客戶端執行文件 刪除服務 sc delete mysql(服務名) 查看系統服務 運行->services.msc 一般設置爲自動啓動。 ``` 若是註冊系統服務失敗則多是由於你以前安裝過mysql 卸載重裝便可。 界面版的安裝失敗也多是以前安裝了,致使端口占用。 ## 三.修改管理員密碼 ```python 如今密碼默認爲空 這樣是不安全的 萬一誰過來把你數據刪了 怎麼辦? #修改密碼 在知道原始密碼的狀況下可使用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.命令行中重啓服務器驗證新密碼 ``` ## 四 編碼設置 ```python 使用客戶端執行\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配置須要重啓服務器