1. 程式人生 > 資料庫 >MySQL基礎部分總結

MySQL基礎部分總結

MySQL是一種關係型資料庫管理系統

資料庫操作

建立資料庫:create database 資料庫名;
顯示已經存在的資料庫:show databases;
刪除資料庫:drop database 資料庫名;
(刪除資料庫會刪除資料庫中所有的表和表中所有的資料)

(資料庫引擎)

檢視資料庫支援的引擎:
1.show engines;
2.show variables like ‘have%’;
檢視資料庫預設引擎:show variables like ‘storage_engine’;
如果想要更改預設引擎,可以在my.ini中更改。
各個引擎的對比

表操作

建立表:
表的建立
查看錶的結構: describe 表名; desc 表名;

查看錶詳細結構語句: show create table 表名 \G;
(加上\G,顯示結果更加美觀,尤其適用於內容比較長的記錄)
修改表名:alter table 舊錶名 rename [to] 新表名;
修改欄位的資料型別:alter table 表名 modify 屬性名 資料型別;
修改欄位名:alter table 表名 change 舊錶名 新屬性名 新資料型別;
增加欄位:alter table 表名 add 屬性名1 資料型別 [完整性約束] [first | after 屬性名2];
刪除欄位:alter table 表名 drop 屬性名;
刪除表的外來鍵約束:alter table 表名 drop foreign key 外來鍵別名;
刪除表:drop table 表名;
(如果有此表為父表,需要先刪除外來鍵約束)

*完整性約束和資料型別

完整性約束
資料型別:包括整數型別,浮點數型別,定點數型別,日期和時間型別,字串型別和二進位制型別。
整數型別
浮點數型別和定點數型別
日期和時間型別
字串型別是在資料庫中儲存字串的資料型別。包括:char,varchar,blob,text,enum和set。
varchar(5)和char(5)的區別
enum型別又稱列舉型別,在建立表時,取值範圍就以列表的形式指定了。
屬性名 enum(‘值1’,‘值2’,…,‘值n’)

資料查詢

select基本語法
select * from 表名; “*”表示所有的欄位;
where表示查詢指定記錄,後面加上條件表示式,即可篩選;
#帶in關鍵字的查詢

[not] in (元素1,元素2,元素n)
in關鍵字可以判斷某個欄位的值是否在指定的集合裡;
#帶between and的範圍查詢
[not] between 取值1 and 取值2
#帶like 的字串匹配查詢
[not] like ‘字串’
like關鍵字可以匹配字串是否相等。
(帶有萬用字元%和_的)
like 'AB%'表示查詢以AB開頭的記錄;
like 'Ar_c’表示查詢_為一個字元的且其他與單引號內容一致的記錄,如Aric,Arqc…
查詢空值
is [not] null 可以用來判斷欄位的值是否為空值;
多條件查詢;
and關鍵字表示需滿足所列條件,or關鍵字表示滿足其一即可;
查詢結果不重複: select distinct 屬性名;
排序查詢結果: order by 屬性名 [asc|desc] asc升序 desc降序
分組查詢:group by關鍵字可以將查詢結果按某個欄位或多個欄位進行分組;
group by 屬性名 [having 條件表示式] [with rollup]
[with rollup]表示在所有記錄最後加上一條所有記錄總和的記錄
限制查詢結果的數量:limit 初始位置,記錄數
使用集合函式查詢:
count(),sum(),avg(),max(),min()
分別表示統計記錄條數,求和函式,求平均值函式,求最 大值函式和求最小值函式。
連線查詢:
內連線查詢:通過表中相同意義欄位來連線表
比如where 表1.屬性1=表2.屬性1;
外連線查詢:
外連線查詢
左連線查詢和右連線查詢
在這裡插入圖片描述在這裡插入圖片描述 複合條件查詢; 使用多個同時限制查詢結果
子查詢;
(可帶有in,
比較運算子(=,!=,<,>,<>,>=,<=等),
帶exists關鍵字(表示存在),
帶any關鍵字(表示滿足其一條件即可),
帶all關鍵字(表示滿足所有條件))
子查詢
合併查詢
合併查詢
為表和欄位起別名
表名 表的別名
屬性名 [as] 別名

插入,更新,刪除資料

插入:insert into 表名 values(值1,值2,…,值n);
值按順序對應表中欄位,且資料型別一致;
如果只是指定部分欄位,需要在表名後加上(屬性1,屬性2,…),且值和指定屬性順序資料型別一致;
如果需要插入多條記錄,只需將上述對應部分改為values(取值列表1),(取值列表2),…,(取值列表n);
將查詢結果插入到表中:
在這裡插入圖片描述
更新資料:
更新資料
在這裡插入圖片描述
刪除資料:
刪除資料

正規化

正規化:

分類:第一正規化,第二正規化,第三正規化,BC正規化,第四正規化

主鍵:能夠唯一標識表中的每條資料
多欄位主鍵:因為一個屬性無法退出後面非主鍵屬性的值;

應用資料庫正規化可以帶來許多好處,但是最重要的好處歸結為三點:
1)減少資料冗餘(這是最主要的好處,其他好處都是由此而附帶的)
2)消除異常(插入異常,更新異常,刪除異常)
3)讓資料組織的更加和諧…
!但是資料庫正規化絕對不是越高越好,正規化越高,意味著表越多,多表聯合查詢的機率就越大,SQL的效率就變低。
注意:一般關係型資料庫滿足第三正規化就可以了!

第一正規化:(1NF)
每一列保持原子特性
列都是基本資料項,不能夠再進行分割,否則設計成一對多的實體關係。

第二正規化:(2NF)
非主屬性完全依賴於主鍵(主要針對聯合主鍵->消除部分依賴)
符合第一正規化的基礎上,非主屬性完全依賴於主關鍵字,如果不是完全依賴主鍵,應該拆分成新的實體,設計成一對多的實體關係。

第三正規化:(3NF) 屬性不依賴於其它非主屬性(消除依賴傳遞)
基於第二正規化的基礎,非主屬性只依賴於主屬性
要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字資訊

BC正規化:(BCNF)
每個表中只有一個候選鍵,不重複的屬性稱為候選鍵
簡單的說,BC正規化是在第三正規化的基礎上的一種特殊情況,即每個表中只有一個候選鍵(在一個數據庫中每行的值都不相同,則可稱為候選鍵)