數據庫

1、mysql安裝與介紹

(一)概念介紹

數據庫:存儲數據的倉庫。對數據進行存儲,而且提供增、刪、改、查的數據操做。python

數據庫建模:使用數據庫來表達業務和業務的關係,數據建模成功與否決定了項目 的成敗。mysql

業務邏輯:實體業務之間的關係,好比:養殖場,豬和飼養員的關係。sql

事務:mongodb

事務:是做爲一個單元的一組有序的數據庫操做,若是組當中全部操做都成功,則事務執行成功,若是有一個操做執行失敗,則事務執行失敗,回滾操做。數據庫

事務的特性:django

原子性:事務包含的全部操做所有成功,要麼所有失敗回滾;成功必須徹底應 用到數據庫,失敗則不能不能對數據庫產生影響。windows

一致性:事務執行前和執行後必須處於一致狀態。併發

隔離性:當多用戶併發訪問數據庫時候,數據庫爲每個用戶開啓一個事務, 這個事務不被其餘事務操做干擾,多個併發事務直接互相隔離。nosql

持久性:一旦事務被提交了,那麼數據庫當中的數據改變是永久性的,即使數 據庫系統發生故障,也不會丟失事務操做。工具

事務的回滾:

事務是用戶定義的一組數據庫操做。這些操做要麼全作,要麼全不作,回滾會自動是將該事務完成的操做撤銷。

數據庫提供的四種隔離等級:

若是咱們不考慮隔離性,會致使

髒讀

在一個事務處理的過程中讀取另外一個沒有提交的事務當中的數據,而後使用了數據。

AB轉帳100元,A通知B查看帳戶,B發現已經到帳,轉帳操做過程中,事務發生問題,進行回滾,B再查帳發現沒有成功。

不可重複讀

在一個事務以內,屢次讀取一條數據,這個事務沒有結束,另外一個事務也訪問這個數據,第二個事務訪問數據要對數據進行修改,那麼一個數據兩次事務讀到的結果肯能不同。

幻讀

有兩個事務,第一個操做全部的數據,第二個操做一條數據,第二個事務沒有提交,第一個事務查看到的數據是以前的。

 

以上的問題都處於數據庫沒有隔離性。

隔離性的四個等級

Read uncommited(讀未提交),最低級別,任何狀況均可以發生。

Read commited(讀已提交),能夠避免髒讀

Repeatable read(可重複讀),能夠避免髒讀,不可重複讀的發生

Serializable(串行化),能夠避免髒讀,不可重複讀,幻讀的發生

數據庫分類

關係型數據庫:是創建在在關係模型的基礎上的數據庫,藉助集合,代數等數學概念和方法來處理數據。

Oracle,db2,sqlserver,access,Mysql,sqlite

非關係型數據庫(nosql not only sql):key-value形式存儲的文檔數據庫

Redismongodb

{「name」:」築基丹」,」img」:[「1.jpg」,「1.jpg」,「1.jpg」]}

(二)MYSQL數據庫安裝

Mysql引擎

數據庫的引擎是用於存儲,處理和保護數據的核心服務。利用數據庫引擎能夠控制訪問權限而且快速的處理事務,利用數據庫引擎建立鏈接事務處理。

 

MySQL數據庫引擎分類

1ISAM  

ISAM是一個定義明確且歷經時間考驗的數據表格管理方法,它在設計之時就考慮到數據庫被查詢的次數要遠大於更新的次數。所以,ISAM執行讀取操做的速度很快,並且不佔用大量的內存和存儲資源。ISAM的兩個主要不足之處在於,它不支持事務處理,也不可以容錯:若是你的硬盤崩潰了,那麼數據文件就沒法恢復了。若是你正在把ISAM用在關鍵任務應用程序裏,那就必須常常備份你全部的實時數據,經過其複製特性,MYSQL可以支持這樣的備份應用程序。

2MYISAM

  MYISAMMYSQLISAM擴展格式和缺省的數據庫引擎。除了提供ISAM裏所沒有的索引和字段管理的功能,MYISAM還使用一種表格鎖定的機制,來優化多個併發的讀寫操做。其代價是你須要常常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。MYISAM還有一些有用的擴展,例如用來修復數據庫文件的MYISAMCHK工具和用來恢復浪費空間的MYISAMPACK工具。

  MYISAM強調了快速讀取操做,這可能就是爲何MYSQL受到了WEB開發如此青睞的主要緣由:在WEB開發中你所進行的大量數據操做都是讀取操做。因此,大多數虛擬主機提供商和INTERNET平臺提供商只容許使用MYISAM格式。

3HEAP

HEAP容許只駐留在內存裏的臨時表格。駐留在內存裏讓HEAP要比ISAMMYISAM都快,可是它所管理的數據是不穩定的,並且若是在關機以前沒有進行保存,那麼全部的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你須要使用SELECT表達式來選擇和操控數據的時候很是有用。要記住,在用完表格以後就刪除表格。

4INNODBBERKLEYDB

  INNODBBERKLEYDBBDB)數據庫引擎都是造就MYSQL靈活性的技術的直接產品,這項技術就是MYSQL++ API。在使用MYSQL的時候,你所面對的每個挑戰幾乎都源於ISAMMYISAM數據庫引擎不支持事務處理也不支持外來鍵。儘管要比ISAMMYISAM引擎慢不少,可是INNODBBDB包括了對事務處理和外來鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述,若是你的設計須要這些特性中的一者或者二者,那你就要被迫使用後兩個引擎中的一個了。

 

數據庫安裝

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文件缺失,網上下載文件包:

 

 

 

 

 

 

將這個文件複製到

 

 

錯誤2Mysql配置文件有問題

 

 

 

錯誤3驅動缺

 

 

解決方案,下載DirectX Repair

 

重新啓動電腦。

錯誤3Cmd不是管理員身份

 

錯誤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數據庫須要鏈接數據庫

Mysql  -u  -p  -h

-u 用戶,默認有root用戶,root用戶是mysql數據庫的管理員用戶,擁有最高的權限。因此默認不容許遠程登陸root用戶。

-p 密碼,用戶對應的密碼

-h 主機,默認是localhost(127.0.0.1)表明本機,

Mysql結構

Mysql是數據庫類型

mysql當中,存放的

Database 數據庫

Table

Fieldcolumn) 字段

Value

對比officeExcel來看

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 字符

Charvarchar 都須要指定長度,若是字符的長度不夠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

 

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

 

     

 

這兩張表經過parentid來關聯

 

查詢老張的全部兒子

 

 

 

查詢李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 條件

 

全部宿舍的學員狀況

 

沒有學員的宿舍

 

 

 

沒有宿舍的學員

 

 

 

(一)受權

相關文章
相關標籤/搜索