一、 資料庫發展歷史

1. 數據概念?

以目前互聯網角度認為計算機上存儲的所有內容都可以是數據。文字可以是數據,文件可以是數據,視頻可以是數據。但是總體上可以把數據分為:

  • 1) 文本數據
  • 2) 二進位數據

二進位數據是計算機發展後才出現的。而文本數據是從古代就有的。

2. 數據發展歷史

數據記錄發展歷史:

  • 1) 以紙質媒介作為載體(記錄在紙上,例如:面試時在前台簽到)
  • 2) 隨著計算機的發展,可以把數據記錄在計算機中文件上。如:word、excel、XML等文件。但是文件中數據又不具備安全性,同時對於應用程序進行操作又不方便。
  • 3) 關係型資料庫管理系統出現了。它具備數據的安全性,同時支持SQL這種非常方便的操作方式。
  • 4) 隨著互聯網的發展,對於性能要求越來越高,出現了No-SQL資料庫,它是專門解決關係型數據在分散式項目或大型應用中數據讀取效率低或關係型資料庫管理系統不易擴展的問題。但是在目前市場上,No-SQL資料庫只能作為關係型資料庫的補充,而不能替代關係型資料庫。

3. 市場上主流資料庫

關係型資料庫:

  • 1) Oracle:使用免費,服務收費。功能比較多,體積比較大。
  • 2) MySQL:開源、免費、體積小
  • 3) SQL Server : Microsoft 公司的。
  • 4) SQLite:小巧的資料庫,集成在手機中。
  • 5) DB2:IBM公司的資料庫。

非關係型資料庫(No-SQL):

  • 1) HBase(Hadoop Database): 常用在大數據中的面向列的資料庫
  • 2) MemCached:內存型鍵值對資料庫
  • 3) Redis:支持內存型和持久化策略的資料庫系統
  • 4) MongoDB:面向文檔的資料庫

二、 MySQL簡介

1. 資料庫管理系統

資料庫管理系統(DBMS- Database Management System)是整個資料庫系統的統稱。可以建立、管理、維護資料庫。

MySQL中符合下面關係:

2. MySQL簡介

MySQL由瑞典公司MySQL AB公司研發出的開源、免費的關係型資料庫管理系統(RDBMS Relational Database Management System)。以小型、輕便、支持多線程的特點成為目前最流行的關係型資料庫之一。

2008年Sun以10億美金收購MySQL AB公司。2010年Oracle公司以74億美金收購Sun公司。所以目前MySQL屬於Oracle公司產品。

3. MySQL簡易架構

MySQL屬於C/S模型項目,平時所說的安裝MySQL實際上就是指的的安裝MySQL 服務端(即C/S中的S)

4. MySQL常用客戶端

1) MySQL自帶客戶端工具mysql.exe

MySQL安裝後自帶的客戶端工具。一種純命令的方式。

2) Navicat

經典好用的第三方可視化管理工具

3) SQLyog

功能強大的第三方可視化管理工具

三、 MySQL文件目錄解釋

在MySQL 5.7 中安裝時是不允許修改路徑的,默認會安裝到C盤(Windows系統)中,分別安裝到兩個文件夾內

1. 應用程序目錄解釋

Program Files中是MySQL的應用程序所在目錄。文件夾名稱叫做MySQL,MySQL中又包含了如下的子目錄

其中MySQL Server 5.7是程序的目錄,其他文件夾是額外模塊功能所在文件夾。裡面包含如下的子文件夾

2. 數據文件目錄

MySQL 5.7 數據文件和應用程序文件並沒有在一起,而是存放在了C:ProgramDataMySQLMySQL Server 5.7 目錄中,包含了下面信息:

其中Uploads是上傳信息,而my.ini就是MySQL數據的實際配置文件,如果希望修改MySQL的全局配置信息(配置後重啟生效)就在這個文件中進行配置。

而Data文件夾中就是資料庫中數據所在的目錄,包含下面信息

其中文件夾對應的是資料庫。而文件夾中內容跟隨不同的存儲引擎而有不同的文件擴展名。默認情況下有如下幾個

  • 1) .opt 資料庫的編碼信息
  • 2) .frm 表結構
  • 3) .ibd 數據和索引

綜合上面內容可以得出:

資料庫本質就是一組文件集

四、 Navicat 連接MySQL

1. 啟動Navicat後點擊連接

2. 填寫信息

1) 連接名:名稱任意,沒有實際意義,輔助開發人員記憶本次新建的連接名稱

2) 主機名或IP地址: MySQL所安裝的主機IP

localhost表示本機。MySQL安裝後默認只能被本機連接,如果希望MySQL允許其他主機上客戶端連接可以通過修改mysql/user中數據進行控制。修改Host為%表示任意主機都可以連接。

五、 MySQL 5.7 默認資料庫

連接上MySQL 5.7 後默認有四個資料庫

  • information_schema:它提供了訪問資料庫 元數據 的方式.所謂的元數據就是資料庫表名、列名、列類型、約束等信息
  • mysql:所有系統表。例如用戶登錄的賬戶和密碼的信息
  • performance_schema: 系統參數
  • sys:是performance_schema的簡化

六、 MySQL數據存儲單元

MySQL已經安裝完成後,如果希望把姓名」張三」存儲到MySQL中需要有哪些準備?

1. 資料庫 Database

資料庫是MySQL中數據存儲的最大單位。MySQL中可以有多個資料庫。

在實際開發時一般一個資料庫對應一個項目,大型分散式項目中多個資料庫對應一個項目。很少出現多個項目的信息存儲到一個資料庫中。

資料庫本質就是一個文件夾:創建一個新的資料庫實際上就是在C:ProgramDataMySQLMySQL Server 5.7Data中新建一個指定名稱的文件夾。

資料庫在創建時應該包含下面必要信息

  • 1) 資料庫名稱
  • 2) 字符集。默認是utf8
  • 3) 排序規則。默認utf8_general_ci,不區分大小寫,校對速度快,但是準確率可能稍微差一些。

可視化新建資料庫步驟

Navicat中可視化新建資料庫可以右鍵點擊連接名--> 新建資料庫

在彈出框中輸入自定義資料庫名,字符集和排序規則默認即可

2. 表 Table

表是MySQL中數據存儲的最基本單元。所有的數據都存儲在表中。

表是一種結構,和平時所接觸的表格是一樣的,也可以理解成excel的另一種形式。

需要先創建表,讓後向表中錄入數據。

在創建表時要設定表的結構,包含下面信息

  • 1) 表名
  • 2) 列名
  • 3) 列的類型
  • 4) 列的約束

可視化創建表的步驟

右鍵表--> 新建表

在彈出框中輸入信息

  • 名:類名
  • 類型:這一列的類型
  • 長度:字元長度
  • 允許空值:這列中是否允許null(null和』』是不一樣的)

輸入完成後點擊保存按鈕或Ctrl+S進行保存,在彈出框中輸入表名

3. 數據錄入

右鍵表 --> 打開表 準備編輯數據

輸入自己想要的數據後Ctrl+S保存數據

七、 SQL簡介

SQL 英文全稱Structured Query Language,中文全稱結構化查詢語言

它是一套資料庫操作語言,通過SQL可以讓數據知道需要做什麼。

應用程序和資料庫進行交互就是通過SQL

1. SQL發展歷史

從1986年 ANSI(American National Standards Institute 美國國家標準化組織)規定了SQL標準後,每過幾年推出一次標準。

1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86

1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-891992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)

2003年,ISO/IEC 9075:2003,SQL:2003

2008年,ISO/IEC 9075:2008,SQL:20082011年,ISO/IEC 9075:2011,SQL:2011

2. SQL組成

1) DDL(Data Definition Language)數據定義語言

負責資料庫對象的定義的語言。一些以create 、 alter 、 drop等開頭的命令都是DDL

2) DML(Data Manipulation Language)數據操縱語言

對數據進行改變的的命令集。包含insert、update、delete

3) DQL(Data Query Language)數據查詢語言

對數據進行查詢的命令集。包含select

4) DCL(Data Control Language)數據控制語言

對資料庫訪問許可權控制的指令集。包含grant、revoke等

3. SQL 不區分大小寫

SQL是不區分大小寫的

4. SQL作用

SQL是外部對資料庫進行操作的唯一途徑。

所有可視化操作軟體的本質也是把操作轉換為SQL發送給資料庫。

八、 mysql.exe 使用方式

在mysql安裝路徑C:Program FilesMySQLMySQL Server 5.7in 下有mysql.exe,是mysql的命令行形式的客戶端工具。

如果使用帶有圖形界面的系統時mysql工具沒有圖形化界面工具(如navicat)方便好用,但是如果系統不帶有圖形界面mysql工具是一個不錯的選擇。

使用辦法:

1. 啟動命令行

2. 輸入命令: mysql -u 用戶名 -p 回車後輸入密碼

上面的方式也可以使用:mysql -u 用戶名 -p密碼,注意-p和密碼之間沒有空格,這樣可以知道自己輸入的密碼是什麼

3. 注意:編寫命令時一定要以分號結尾,否則回車後會認為sql命名輸入完整,希望繼續輸入。

九、 SQL-資料庫操作

1. 創建資料庫

create database 資料庫名 [default charset utf8 COLLATE utf8_general_ci ]

在可視化操作時已經知道utf8和utf8_general_ci是默認值,所以可以省略。

如果第二次執行此命令會提示資料庫已經存在(通過鍵盤的上下可以調出命令記錄)

所以常在create xxx命令後跟隨if not exists表示如果不存在才去創建

create database if not exists 資料庫名

2. 查看資料庫創建時命令

show create database 資料庫名

可以反饋出資料庫創建時命令和一些自動生成的參數。

3. 查看存在的資料庫名稱

show databases

可以查看目前已經創建的資料庫名稱。一定要注意命令中database後面有s

4. 刪除資料庫

drop database 資料庫名稱

可以刪除資料庫。

如果刪除時資料庫不存在,會提示資料庫不存在

5. 使用資料庫

新建的資料庫不能直接進行建表等操作。要使用use命令告訴mysql建表等操作是針對的哪個資料庫

use 資料庫名

如果使用navicat,則選中的是哪個資料庫,表示use的哪個資料庫。如果希望操作別的資料庫也需要使用use命令

十、 SQL-表操作

從本知識點開始,後面的所有操作都使用Navicat進行演示

1. 創建表

create table 表名(
列名 類型 [約束] [COMMENT 備註],
列名 類型 [約束] [COMMENT 備註]
) [ENGINE=InnoDB] [DEFAULT CHARSET=utf8] [COMMENT 備註] ;

所有[]中內容都是可以省略的內容,所以創建表最簡單的寫法:

create table stu(
id int,
name varchar(20)
);

在以後的學習或工作過程中給表添加備註是一個非常不錯的習慣。

create table stu(
id int comment 主鍵,
name varchar(20) comment 姓名
) comment 學生;

可以通過命令show create table 表名;顯示定義表時備註,這對於表比較多時是十分必要的。

也可以通過可視化操作,右鍵點擊表-->對象信息-->DDL

在彈出的界面中點擊DDL進行查看

2. 修改表名稱

rename table 舊錶名 to 新表名

3. 查看錶結構

desc 表名

4. 添加列

alter table 表名 add column(列名 類型 約束,列名 類型 約束);

5. 修改列類型

alter table 表名modify column 列名 新類型;

6. 修改列名或類型

alter table 表名change column 原列名 新列名 新列類型;

7. 刪除列

alter table 表名 drop column 列名;

8. 刪除表

drop table 表名;

9. 查看資料庫中表

show tables;

十一、 SQL-新增

對於下面的表結構進行新增

無論使用下面哪種新增,如果新增成功都會返回受影響的行數。

DML中 操作資料庫返回的都是受影響的行數。

1. 標準新增

insert into 表名[(列名,列名)] values(,);

其中表名後的列和values後面的值要順序及類型要嚴格對應,如果表名後面沒有列名相當於把所有的列按照順序寫一遍。

列名不是必須包含所有列,如果只包含部分列表是其它列默認值

2. 插入多條數據

insert into 表名 values(值,值),(值,值),(值,值);

可以使用多個insert into插入多條數據。但是如果希望使用一條SQL命令一次插入多條數據就要使用上面的命令。

3. 從外部txt文檔新增

load data local infile "D:/data.txt" into table 表名

需要注意的是,如果是直接使用windows新建的記事本默認編碼ANSI,在導入時會出現編碼問題,無法支持中文。而直接另存為UTF-8格式的文件會帶有BOM(在文件前面多多幾個位元組),windows系統可以識別,但是MySQL無法識別,所以需要使用文本編輯工具(例如:Notepad)修改文件為無BOM的UTF-8

文件中內容是否製表符(tab)分割,null使用
表示

直接輸入命令導入即可

4. 把表數據新增到另一個表中

insert into 新表 select , from 舊錶;

新增時要注意新表是已經存在的,且select後面的列和新表中列的順序、類型等是否一致。

十二、 pymysql安裝

在python3.x中不支持python2中mysql連接模塊mysqldb。

在python3.x中可以使用PyMySQL,oursql,myconnpy等。

1. 確認是否已經安裝PyMySQL

pymysql在python3的庫中默認是沒有的,在程序中import pymysql會提示下面的錯誤信息

2. 確定pip是否可以使用

啟動命令行輸入pip後查看是否已經有pip,如果提示下面信息則表示已經安裝並配置pip

3. 安裝pymysql

在命令行輸入: pip install pymysql 進行安裝

安裝成功後會在:%python%Libsite-packages下出現pymysql文件夾

如果已經下載,會直接使用pip緩存,windows系統緩存目錄如下:

C:UsersAdministratorAppDataLocalpip

4. 確認是否已經安裝成功

在命令行輸入:pip list 查看是否有pymysql

5. 再次運行

再次運行包含import pymysql 的文件,如果不報錯說明安裝成功。

備註:如果已經提示沒有pymysql模塊,請考慮pycharm引用的庫路徑是否是本機中python庫路徑。

如果不是,通過菜單File --> Settings --> Project:xxx --> Project Interpreter切換到本地python庫的路徑

十三、 PyMySQL使用

1. 查詢

import pymysql

conn = pymysql.connect(host=localhost, port=3306, user=root, passwd=smallming, db=test123)
cur = conn.cursor()
try:
cur.execute(select * from student)
data = cur.fetchall()
for d in data:
print("id:" + str(d[0]) + ",name:" + d[1])
finally:
cur.close()
conn.close()

2. 增加刪除修改

import pymysql

# 獲取連接
conn = pymysql.connect(host="localhost",port=3306,user="root",passwd="smallming",db="bjsxt")
# 獲取游標
# 後面從資料庫角度進行講解
# 理解成數據的指向
cur = conn.cursor()
try:
# 準備執行sql
cur.execute("insert into student values(997,997的姓名)")
# 提交事務
# 讓sql生效,可視化的運行
conn.commit()

except:
# 回滾
conn.rollback()
finally:
cur.close()
conn.close()
# 受影響的行數
if cur.rowcount > 0:
print("新增成功")
else:
print("失敗")

十四、 SQL-修改

update 表名 set =新值,=新值 where 條件

修改語法比較簡單,平時使用時也就這一種形式。如果沒有where表示修改表中所有行的數據。如果有where可以過濾條件,明確指定哪些行數據需要修改

1. 修改全部行

修改後所有行的name列都變成了張三

2. 修改指定行

修改id為12行中name為李四

十五、 SQL-刪除

MySQL的刪除就是從數據文件中刪除數據。

1. 使用delete刪除

delete from 表 where 條件

如果有where表示刪除的條件,如果沒有where表示刪除全部數據。

使用delete時要明確的知道,無論刪除多少行數據,MySQL在執行刪除時都是一行一行刪除的。

2. 使用truncate 清空表數據

truncate table 表名

truncate會清空表(不是逐條刪除),同時也會重置主鍵計數器等內容。可以理解成truncate後的這個表是新建的表。


推薦閱讀:
相关文章