數據庫:存儲數據的倉庫。對數據進行存儲,而且提供增、刪、改、查的數據操做。python
數據庫建模:使用數據庫來表達業務和業務的關係,數據建模成功與否決定了項目 的成敗。mysql
業務邏輯:實體業務之間的關係,好比:養殖場,豬和飼養員的關係。sql
事務:mongodb
事務:是做爲一個單元的一組有序的數據庫操做,若是組當中全部操做都成功,則事務執行成功,若是有一個操做執行失敗,則事務執行失敗,回滾操做。數據庫
事務的特性:django
原子性:事務包含的全部操做所有成功,要麼所有失敗回滾;成功必須徹底應 用到數據庫,失敗則不能不能對數據庫產生影響。windows
一致性:事務執行前和執行後必須處於一致狀態。併發
隔離性:當多用戶併發訪問數據庫時候,數據庫爲每個用戶開啓一個事務, 這個事務不被其餘事務操做干擾,多個併發事務直接互相隔離。nosql
持久性:一旦事務被提交了,那麼數據庫當中的數據改變是永久性的,即使數 據庫系統發生故障,也不會丟失事務操做。工具
事務的回滾:
事務是用戶定義的一組數據庫操做。這些操做要麼全作,要麼全不作,回滾會自動是將該事務完成的操做撤銷。
數據庫提供的四種隔離等級:
若是咱們不考慮隔離性,會致使
髒讀
在一個事務處理的過程中讀取另外一個沒有提交的事務當中的數據,而後使用了數據。
A向B轉帳100元,A通知B查看帳戶,B發現已經到帳,轉帳操做過程中,事務發生問題,進行回滾,B再查帳發現沒有成功。
不可重複讀
在一個事務以內,屢次讀取一條數據,這個事務沒有結束,另外一個事務也訪問這個數據,第二個事務訪問數據要對數據進行修改,那麼一個數據兩次事務讀到的結果肯能不同。
幻讀
有兩個事務,第一個操做全部的數據,第二個操做一條數據,第二個事務沒有提交,第一個事務查看到的數據是以前的。
以上的問題都處於數據庫沒有隔離性。
隔離性的四個等級
Read uncommited(讀未提交),最低級別,任何狀況均可以發生。
Read commited(讀已提交),能夠避免髒讀
Repeatable read(可重複讀),能夠避免髒讀,不可重複讀的發生
Serializable(串行化),能夠避免髒讀,不可重複讀,幻讀的發生
數據庫分類
關係型數據庫:是創建在在關係模型的基礎上的數據庫,藉助集合,代數等數學概念和方法來處理數據。
Oracle,db2,sqlserver,access,Mysql,sqlite
非關係型數據庫(nosql not only sql):以key-value形式存儲的文檔數據庫
Redis、mongodb
{「name」:」築基丹」,」img」:[「1.jpg」,「1.jpg」,「1.jpg」]}
Mysql引擎
數據庫的引擎是用於存儲,處理和保護數據的核心服務。利用數據庫引擎能夠控制訪問權限而且快速的處理事務,利用數據庫引擎建立鏈接事務處理。
MySQL數據庫引擎分類
(1)ISAM
ISAM是一個定義明確且歷經時間考驗的數據表格管理方法,它在設計之時就考慮到數據庫被查詢的次數要遠大於更新的次數。所以,ISAM執行讀取操做的速度很快,並且不佔用大量的內存和存儲資源。ISAM的兩個主要不足之處在於,它不支持事務處理,也不可以容錯:若是你的硬盤崩潰了,那麼數據文件就沒法恢復了。若是你正在把ISAM用在關鍵任務應用程序裏,那就必須常常備份你全部的實時數據,經過其複製特性,MYSQL可以支持這樣的備份應用程序。
(2)MYISAM
MYISAM是MYSQL的ISAM擴展格式和缺省的數據庫引擎。除了提供ISAM裏所沒有的索引和字段管理的功能,MYISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操做。其代價是你須要常常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。MYISAM還有一些有用的擴展,例如用來修復數據庫文件的MYISAMCHK工具和用來恢復浪費空間的MYISAMPACK工具。
MYISAM強調了快速讀取操做,這可能就是爲何MYSQL受到了WEB開發如此青睞的主要緣由:在WEB開發中你所進行的大量數據操做都是讀取操做。因此,大多數虛擬主機提供商和INTERNET平臺提供商只容許使用MYISAM格式。
(3)HEAP
HEAP容許只駐留在內存裏的臨時表格。駐留在內存裏讓HEAP要比ISAM和MYISAM都快,可是它所管理的數據是不穩定的,並且若是在關機以前沒有進行保存,那麼全部的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你須要使用SELECT表達式來選擇和操控數據的時候很是有用。要記住,在用完表格以後就刪除表格。
(4)INNODB和BERKLEYDB
INNODB和BERKLEYDB(BDB)數據庫引擎都是造就MYSQL靈活性的技術的直接產品,這項技術就是MYSQL++ API。在使用MYSQL的時候,你所面對的每個挑戰幾乎都源於ISAM和MYISAM數據庫引擎不支持事務處理也不支持外來鍵。儘管要比ISAM和MYISAM引擎慢不少,可是INNODB和BDB包括了對事務處理和外來鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述,若是你的設計須要這些特性中的一者或者二者,那你就要被迫使用後兩個引擎中的一個了。
數據庫安裝
Python開發使用mysql數據庫5.5版本以上(django2.0以後放棄mysql5.5以前的支持),在mysql版本當中5.7以前的版本都有.exe或者.msi的可執行安裝文件,可是到5.7版本只有zip壓縮包安裝方法。
一、下載安裝包
Mysql官網:
https://dev.mysql.com/downloads/
二、編寫安裝配置文件(在5.7以前有自帶,後來沒有了)
一、解壓,不要解壓到c盤,不要解壓到中文目錄
二、解壓完成,進入目錄,編寫my.ini
先建立my.txt,寫入配置
而後保存,並修改後綴
Mysql默認端口是3306
Mysql默認編碼是Latin1,咱們需求修改成utf8
三、執行安裝命令
首先進入解壓目錄下的bin目錄。開始命令行(要以管理員身份開啓)。
Shift+鼠標右鍵 -->在此處打開命令窗口
開始 -> cmd --> 右鍵 -->以管理員身份運行
使用cd切換bin目錄下
執行安裝命令mysqld install
執行激活命令mysqld --initialize-insecure --user=mysql
執行成功
四、配置環境變量並啓動
配置環境變量
開啓數據庫
效果以下:
整個安裝過程中因爲windows系統的環境確實致使安裝失敗,咱們須要提早補充環境。
錯誤1:
Windows文件缺失,網上下載文件包:
將這個文件複製到
錯誤2:Mysql配置文件有問題
錯誤3驅動缺
解決方案,下載DirectX Repair
重新啓動電腦。
錯誤3:Cmd不是管理員身份
錯誤4:路徑錯誤
手動建立data目錄
錯誤5:
一、服務沒有啓動
二、配置文件問題,對比配置文件,修改重啓
三、以前有過mysql殘餘。
完全刪除mysql註冊表
運行「regedit」文件,如圖,打開註冊表
刪除註冊表數據,經過regedit,刪除如下幾個文件【也能夠在註冊表裏搜索mysql】:HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/Eventlog/Applications/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/Services/Eventlog/Applications/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Eventlog/Applications/MySQL
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services通常服務會以相同的名字(名字一般是MySQL)在這裏顯
刪除mysql服務
sc delete mysql
Mysql是一個數據庫,可是咱們安裝的mysql數據庫服務,服務就會有狀態,啓動,中止,重啓。咱們使用mysql必須保證mysql啓動。
使用mysql數據庫須要鏈接數據庫
Mysql -u -p -h
-u 用戶,默認有root用戶,root用戶是mysql數據庫的管理員用戶,擁有最高的權限。因此默認不容許遠程登陸root用戶。
-p 密碼,用戶對應的密碼
-h 主機,默認是localhost(127.0.0.1)表明本機,
Mysql結構
Mysql是數據庫類型
在mysql當中,存放的
Database 數據庫
Table 表
Field(column) 字段
Value 值
對比office的Excel來看
Mysql ---> Excel
Database ---> file
Table ---> Sheet
Field ---> 表頭
Value ---> 數據
Sql語法規則
一、分號結尾
二、全部sql文檔,系統變量大寫
三、Mysql自己大小寫不敏感
查詢數據庫命令
SHOW DATABASES;
建立數據庫
CREATE DATABASE school CHARSET=UTF8;
使用數據庫
USE school
查看錶
SHOW TABLES;
CREATE TABLE student(id INT,name CHAR(32),age INT,major CHAR(32),class CHAR(32), phone CHAR(32)) CHARSET=UTF8;
建立表格式
CREATE TABLE tb_name(field FIELD_TYPE,) [CHARSET=UTF8];
字段類型:
Int
TINYINT 微整數 1個字節 -128-127
SMALLINT 小整數 2個字節
MEDIUMINT 中等整數 3個字節
INT 整數 4個字節 -2147483648-2147483647
BIGINT 大整數 8個字節
Float 4個字節
Char 字符
Varchar 字符
Char和varchar 都須要指定長度,若是字符的長度不夠char的長度,以空格填充,
Varchar 按照字符的長度設定長度
Char類型的字符串不能夠用空格結尾
Date 3字節 1998-12-21
TIME 3字節 23:24:24
插入語句
查看錶結構
DESC student;
插入數據
INSERT INTO student(id,name,age,major,class,phone) VALUE(1,"老 邊",18,"python","0506","13331153360");
Query OK, 1 row affected (0.01 sec)
查詢數據庫數據
SELECT 字段 FROM table_name;
全部字段能夠用*代替,在工做當中通常不容許用*
SELECT * FROM student WHERE age=18;
咱們要搭建數據庫描述學生與宿舍
查詢
全部男生
全部18以上的女生
查詢302宿舍的學生
查詢1號
條件查詢
SELECT * FROM student WHERE age=18
比較運算符
> 、<、 =、>= 、<=、<>、 !=
邏輯運算
And
Or
Not
模糊查詢 SELECT * FROM student WHERE name LIKE 「小%」
%pip 0到多個字符
範圍查詢
查詢爲空
不爲空
排序
SELECT * FROM student ORDER BY age;以年齡排序
多條件排序,第一個條件爲主排序條件
排倒敘
篩選和排序連用(先篩選再排序)
子查詢
子查詢是一種嵌套查詢,將一個查詢用小括號包圍起來,而後做爲下一個查詢的結果,子查詢必須有別名。
SELECT nan.name FROM (SELECT name,age FROM student WHERE gender=」男」 ) AS nan WHERE age = 18;
數據庫關係針對是多表之間的聯繫。
一對一
兩個表的每條數據之間,存在惟一映射關係。
舉個栗子:
用戶登錄表 用戶
手機號 姓名
驗證碼 身份證號
頭像
郵箱
手機號
一對多
將兩個表分爲一個一表,一個多表,一表當中數據能夠對應多表當中的多條數據,多表當中的一條數據只能對應一表當中的一條數據。
舉個栗子:
父親(一表) 兒子(多表)
張三 張1
張2
Id p_id
這兩張表經過parent的id來關聯
查詢老張的全部兒子
查詢李3的父親
多對多
一個表當中數據能夠對應另外一個表當中的多條數據,反之亦然。
專業 課程
關係
Python全部的課程
包含計算機基礎全部的專業
父子id關係
在商品類型當中會涉及到子類型
舉個栗子:
服裝
男裝
中山裝
高級中山裝
Parent_id
內鏈接查詢(inner join)
查詢兩個表共有的數據,交集
SELECT * FROM tb1 INNER JOIN tb2 ON 條件
全部有宿舍的學員
左表查詢(左關聯查詢)(left join)
查詢兩個表共有的數據,和左表全部的數據,左表有右表沒有的部分用null代替
SELECT * FROM tb1 LEFT JOIN tb2 ON 條件
全部學員的住宿狀況
右表查詢(右關聯查詢)(right join)
查詢兩個表共有的數據,和右表表全部的數據,右表有左表沒有的部分用null代替
SELECT * FROM tb1 RIGHT JOIN tb2 ON 條件
全部宿舍的學員狀況
沒有學員的宿舍
沒有宿舍的學員