Mysql總結:
Mysql介紹
Mysql
是一個關係型資料庫管理系統,由MYSQL AB
公司開發,Mysql
是最流行的關係型資料庫管理系統之一,在WEB應用方面,Mysql
是最好的RDBMS
(關係型資料庫系統)應用軟體.
Mysql
是一種關係型資料庫管理系統,關係型資料庫將資料儲存到不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性.
Mysql
所使用的SQL
語言是訪問資料庫的最常用的標準化語言.Mysql
軟體採用了雙授權政策,分為社群版和商業版,由於體積小,速度快,總體成本低,尤其是開房原始碼的特點,一般中小型網站的開發都選擇Mysql
作為網站資料庫.
Mysql資料庫特點
1.持久化儲存
2.讀寫速度極高
3.儲存資料的有效性
4.對程式支撐非常好,以擴充套件
資料型別
1.整數:
int
:表示基本整形,在記憶體中佔4個位元組
bit
:二進位制型別,這種資料型別常作為邏輯變數使用,用來表示真或假,兩值選擇.
int unsigned
:無符號整型,表示只能為正數
2.小數:
decimal
:表示浮點型,如decimal(5,2)表示共5位數字,小數點佔2位.
3.字串:
varchar
:表示最大不能超過多少字元,如varchar(20),表示最長字元別超過20個字元.
char
:表示固定長度的字元,如果填寫的字元不足,則以空格追加.
4.列舉型別:
enum
:類似於選擇題型別,如:gender enum(“男”,“女”,“中性”,“保密”) default"保密"
5.日期時間:
date,time,datetime
:
資料約束
auto_increment
:表示自動增長:一般用於設定主鍵,表示主鍵ID順序的增長序號.
mot null
:表示不能為空:表示此欄位必須填寫資料,不能為空
primary key
:表示主鍵:物理上儲存的順序,mysql建議所有表中的主鍵欄位都叫ID,型別為int unsigned
foreign key
:表示外來鍵:對關係欄位進行約束,當為關係欄位填寫時,會到關聯的表中查詢此值是否存在,如果存在則填寫成功,如果不存在則填寫失敗,並丟擲異常.
unique
:唯一:表示此欄位的值不允許重複
defauit
:預設值:表示此欄位如果填寫會按照填寫的資料新增,如果不寫會以預設值顯示
注意:在建立表的時候,資料型別必須寫,資料約束可以不寫,根據實際情況.
資料庫基本命令
連線資料庫:mysql -uroot -p密碼,或回車-->密碼
退出資料庫:快捷鍵:Ctrl + d
顯示資料庫版本:select version();
顯示時間:select now();
顯示當前使用的資料庫:select database();
查詢所有資料庫:show databases;
使用資料庫:use 資料庫名稱
刪除資料庫:drop database 資料庫名稱
建立資料庫:
語法:create database 資料庫名字 charset=utf8;
例子:create database user_name charset=utf8;
資料庫的增刪改查
增加:
新增欄位:
語法:alter table 表名 add 欄位名 型別;
例子:alter table python add jixiangwu varchar(20);
欄位中插入資料:
1.單個插入:
語法:insert into 表名 values(資料...);
1.例子:insert into students values(0, '張三', 19, 1.78, '男', 1);
2.例子:insert into students(name, age) values('李四', 20);
3.例子:insert into students(height, name) values(1.68, '王五);
2.多個插入:
語法:insert into 表名(欄位名....) values(資料...),(資料...),(資料...);
例子:insert into students(height, name) values(1.70, '趙六'), (1.8, '馮七'),(1.70, '小明');
刪除:
1.物理刪除:
語法:delete from 表名 where 條件;
例子:delete from students where id=2;
說明:一旦物理刪除就真的刪除了沒辦法恢復了,切記.
2.邏輯刪除:
1.要邏輯刪除先要給表建立id_delete的欄位.
alter table students add is_delete bit default 0;
2.然後在進行邏輯刪除.
update students set is_delete=1 where id=2;
說明:
邏輯刪除只是給某個欄位加上的一個標識,這個標識是0和1,但是0是不顯示的,而1顯示,表示此欄位已經邏輯刪除.邏輯刪除本質就是"修改操作"
3.刪除表:drop table 表名;
4.刪除欄位:alter table 表名 drop 欄位名;
修改:
1.修改欄位資料:
01.全部修改:
語法:update 表名 set 欄位=值;
例子:update students set high=170.00;
02.條件修改:
語法:update 表名 set 列1=值1,列2=值2... where 條件;
例子:update students set high=188.88 where id=2;
2.修改欄位:
01.欄位取別名:
語法:select 欄位名 as "新名字" from 表名;
例子:select name as "姓名" from students;
02.修改欄位-重新命名版:
語法:alter table 表名 change 源欄位名 新欄位名 型別及約束;
例子:alter table python change jixiangwu jixiangwu1 varchar(20);
03.修改欄位-不重新命名版:
語法:alter table 表名 modeify 欄位名 型別及約束;
例子:alter table python modeify jixiangwu varchar(30); alter table python modeify jixiangwu varchar(30);
查詢:
查詢所有欄位:
語法:select * from 表名;
例子:select * from python;
去重查詢:
語法:select distinct 欄位名 from 表名;
例子:select distinct name from python;
插敘指定欄位:
語法:select 列1,列2,... from 表名;
例子:select id,name from python;
條件查詢:
語法:select * from 表名 where 條件;
例子:select * from students where id=2;
條件的選擇:
1.小於號的使用:>select * from 表名 where id > 3;
2.大於號的使用:<select * from 表名 where id <= 4;
3.不等於號的使用:!=select * from 表名 where name != '黃蓉';
4.或的使用:andselect * from 表名 where id > 3 and gender=0;
5.與的使用:orselect * from 表名 where id < 4 or is_delete=0;
6.like_的使用:select * from 表名 where name like'黃__';
7.like%的使用:select * from 表名 where name like '黃%';
8.in的使用:select * from 表名 where name in('黃蓉','郭靖','周杰倫');
9.between…and…的使用:
語法:select * from 表名 where (id between 3 and 8) and 欄位=值;
說明:
可以在最後在加一個條件來篩選.
10.查詢為空的欄位:select * from 表名 where 欄位 is null;
11.查詢不為空的欄位:select * from 表名 where 欄位 is not null;
12.排序查詢:order by
語法:select * from 表名 order by 欄位名 升序或降序;
升序:select * from students order by age asc;
降序:select * from students order by age desc;
13.分頁查詢:
語法:
select * from 表名 ilmit start=0,count;
說明:start:表示在第幾行開始讀取,count:表示顯示幾行資料.
例子:
select * from students where limit 2,5;
select * from students where gender='男' limit 2,5;
說明:顯示在第二行開始讀取,共顯示5行資料,並且顯示男生.
14.聚合函式:
01.數量count(*):select count() from 表名;
02.最大值max(欄位名):select max(id) from 表名 where
03.最小值min(欄位名):select min(age) from 表名;
04.求和sum(欄位名):select sum(id) from students;
05.平均值avg(欄位名):select avg(id) from students
總結:
max:求出集合中資料最大的值
min:求出集合中資料最小的值
count:求出集合中資料的數量
sum:求出集合中資料的求和
avg:求出集合中資料的平均值
常用的查詢規則
1.比較運算子:
=
:等於
>
:大於
<
:小於
>=
:大於等於
<=
:小於等於
!=
:不等於
2.邏輯運算子:
and
:與
or
:或
not
:非
3.模糊查詢符:
like%
:表示任意多個字元
like_
:表示任意一個字元
4.範圍查詢符:
in
:表示在一個非連續的範圍內
between...and...
:表示在一個連續的範圍內
優先順序說明:
1.優先由高到底的順序為:小括號,not,比較運算子,邏輯運算子
2.and和or先運算,如果同時出現並希望先算or,需要結合()使用
連線概念
1.Mysql支援的3中連線查詢方式:
01.內連線查詢:查詢的結果為兩個表匹配到的資料.
02.右(外)連線查詢:查詢的結果為兩個表匹配到的資料和右表特有的資料,對於左表中不存在的資料使用null填充.
03.左(外)連線查詢:查詢結果為兩個表匹配到的資料和左表特有的資料,對於右表中不存在的資料使用null填充.
2.自關聯:
介紹:自關聯是一種特殊的連線方式
作用:當需要對多張表的相關資料彙總一個結果集中,並且多張表的資料來自於同一張表.
注意:需要對錶起多個不同的別名草能進行自關聯查詢.
3.子查詢:
介紹:在一個select語句中,嵌入了另外一個select語句,那麼被嵌入的select語句稱之為子查詢語句,外部那個select語句則稱之為主查詢.
子查詢和主查詢的關係:
1.子查詢是嵌入到主查詢中
2.子查詢是輔助主查詢的,要麼充當條件,要麼充當資料來源.
3.子查詢是可以獨立存在的語句,是一條完整的select語句.
子查詢分類:
1.標量子查詢:子查詢返回的結果是一個數據(一行一列)
2.列子查詢:返回的結果是一列(以列多行)
3.行子查詢:返回的結果是一行(一行多列)
外來鍵:foreign key
說明:foreign key約束指定某一個列或組列作為外部鍵,其中包含外部鍵的表稱為子表,包含外來鍵所引用的鍵的表稱為父表.
作用:對外來鍵欄位的值在更新和插入時進行和引用的表中欄位資料進行對比
資料庫的設計
1.三正規化NF:
1NF:強調的是列的原子性,即列不能夠在分成其他幾列.
2NF:首先是1NF,另外包含兩部分內容,意識表必須有一個主鍵,二是非主鍵欄位必須完整依賴於主鍵,而不能只依賴於主鍵的一部分.
3NF:首先是2NF,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴,即不能存在,非主鍵列A依賴於非主鍵列B,非主鍵列B依賴於主鍵的情況.
2.E-R模型:
介紹:E-R圖是實體-聯絡圖,是指提供了表示實體型,屬性和聯絡的方法,用來描述現實世界的概念模型.
E-R模型的使用場景:
1.關係型資料庫關係模型的基礎上,我們需要根據產品經理的設計策劃,抽取出來模型與關係,制定出表結構,這是專案開始的第一步.
2.在設計階段一般使用E-R模型進行建模,有很多設計資料庫的軟體,常用的如:power designer,db desinger等,這些軟體可以直觀的看到實體及實體的關係.
3.設計資料庫,可能是由專門的資料庫設計人員來完成,也可能由開發者完成,一般由專案經理帶領來完成.
4.設計完成E-R模型會將其轉換為關係模型.
關係型的三種類型:
1對1:實體A對實體B為1對1,則在表A或表B中建立一個欄位,儲存另一個表的主鍵.
1對多:實體A對實體B為1對多,在表B中建立一個欄位,儲存表A的主鍵值.
多對多:實體A對實體B為多對多,新建一張表C,這個表只有兩個欄位,一個用於儲存A的主鍵值,一個儲存B的主鍵值.
檢視
作用:檢視是對一些複雜的SQL語句進行了封裝,對錶的引用,一張虛表,不儲存具體的資料.方便操作,特別是查詢操作,減少複雜的SQL,增強可讀性.
建立檢視:
語法:create view 檢視名稱 as select SQL語句;
注意:
1.檢視名字一般以v_開頭.
2.檢視中的語句欄位資訊不可以重複,需要進行重新命名.
檢視檢視:show tables;
使用檢視:
語法:select * from 檢視名稱;
例子:select * from v_goods_info;
刪除檢視:drop view 檢視名稱;
總結:
1.檢視封裝了對多張基本表的複雜操作,簡化使用者操作.
2.檢視只是一張虛表,並不儲存任何基本表的資料,當用戶使用檢視的時候,檢視會從基本表中取出.
3.通過檢視可以對使用者展示指定欄位從而遮蔽其他欄位資料,更加安全.
事務
介紹:事務是指為一個基本工作單元執行的一系列SQL語句的操作時,要麼完全的執行,要麼完全的不執行.
事務差用命令:
開啟事務:
begin
說明:pymysql是自動開啟事務的
提交事務:commit
回滾事務:rollback
事務的4大特性:
1.原子性:一個事務必須被看做一個不可分割的工作單元,整個事務不能只執行其中的一部分,要麼全部提交成功,要麼全部失敗,這就是事務的原子性.
2.一致性:資料庫總是從一個一致性狀態轉換為另一個一致性狀態.
3.隔離性:一個事務在沒有完全提交完,對其他的事務是不可見的.
4.永續性:一旦事務提交,其所作的一些都會儲存到資料庫中.
索引
介紹:能夠幫我們快速查詢資料的線索就稱之為索引.索引是個特殊的檔案,他們包含著對資料庫表裡所有記錄的位置資訊.
索引的壞處:
1.建立太多的索引將會影響更新和插入的速度.
2.建立索引會佔用磁碟空間.
建立索引:
語法:
create index 索引名稱 on 表名(欄位名稱(長度))
說明:
1.如果指定欄位是字串需要指定長度,建議長度與定義欄位時的長度一樣.
2.欄位型別如果不是字串,可以不寫長度部分.
查看錶中已有索引:show index from 表名;
刪除索引:drop index 索引名稱 on 表名;
開啟執行時間監測:set profiling=1;關閉執行時間監測set profiling=0;
檢視執行時間:show profiles;
資料庫優化
1.優化索引,SQL語句,分析慢查詢
2.設計表是嚴格根據資料庫的設計正規化來設計資料庫
3.使用快取,把經常訪問到的資料放到快取中,.
4.優化硬碟,採用SSD,使用硬碟佇列技術.
5.採用Mysql內部自帶的表分割槽技術,把資料分成不同的檔案,能夠提高磁碟的讀取xiaolv.
6.把一些不經常讀的資料放在一張表裡.
7.主從分離讀寫,採用主從複製把資料庫的讀操作和寫入操作分離出來.
8.選擇合適的表引擎,引數上的優化.
9.進行架構級別的快取,靜態化和分散式.
10.不採用全文搜尋.
11.採用更快的儲存方式,例如:把經常訪問的資料放到Nosql中.