MySql學習---資料庫基本型別,事務,多表查詢
-
資料庫分類
關係型資料庫
行列,
列如Mysql,oracle
通過表和表之間,行和列之間的關係進行資料的儲存
非關係型資料庫:
Redis,MongDb
以物件儲存,同過物件的自身屬性來決定表與表的關係
一對一,一對多,多對多
外來鍵特點
從表外來鍵的值是對主表主鍵的引⽤。
從表外來鍵型別,必須與主表主鍵型別⼀致。
宣告外來鍵約束語法
alter table 從表 add [constraint][外來鍵名稱] foreign key (從表外來鍵欄位名) references 主表 (主表的主鍵);
SQL聯合查詢(內聯,左聯,右聯,全聯)
內聯inner join,左聯 left outer join,右聯right outer join,全聯,full outer join
建立臨時表,
臨時表只在當前連結可見,關閉連線時候,會自動刪除並釋放所有控制元件‘
此表可供你當次連結的操作裡查詢.
create temporary table 臨時表名稱
select 表字段名稱 from 表名稱
分頁查詢
limit 0,3: 從0開始查,查三條
約束:對錶中的資料進行限定從而保證資料的有效性和完整性。
分類:主鍵約束:primary key
非空約束:not Null
唯一約束:unique
外來鍵約束:foreign key
非空約束:
自動增長:使用auto_increment,可以來完成值的自動增長
新增主鍵約束並且完成,主鍵的自動增長。
多表之間的關係 一對一 一對多 多對多 資料庫設計的正規化 概念:設計資料庫時候,需要遵循的一次要求 第一正規化:每一列都是不可分割的原子資料項 第二正規化:第二正規化在第一正規化的基礎之上更進一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。 第三正規化:需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關。比如在設計一個訂單資料表的時候,可以將客戶編號作為一個外來鍵和訂單表建立相應的關係。而不可以在訂單表中新增關於客戶其它資訊(比如姓名、所屬公司等)的欄位。
內連線查詢
查詢員工表的名稱,性別,部門表的名稱
select
t1.name,--員工表姓名
t1.sex,
t2.name--部門表的姓名
from empt1,dept t2
where
t1.deptid = t2.id
顯示內連線
-
語法:select 欄位列表 from 表1 inner join 表2 on 條件
外連線查詢
左外連線
語法:select 欄位列表 from 表1 left join 表2 on 條件
查詢的是左表所有的所有資料以及其交集部分
右外連線:
語法:select 欄位列表 from 表1 left join 表2 on 條件 查詢的是左表所有的所有資料以及其交集部分
子查詢
查詢中巢狀查詢,稱之為子查詢
子查詢的不同情況
1.子查詢的結果是單行單列
子查詢可以作為條件,運用運算子去判斷
2.子查詢的結果是多行單列
子查詢可以作為為條件,使用運算子in來判斷
select * from emp where dep_id in(select id from dept where name = '財務部' or name = '市場部');
3.子查詢的結果是多行多列
子查詢可以作為一張虛擬表
事務
1.事務的基本介紹
1.概念:
如果一個包含多個步驟的業務操作,被事務管理,要麼同時成功,要麼失敗
可以確保資料的操作安全
2.操作
1.開啟事務:start transaction
2.事務回滾:rollbsck(事務出現問題就回滾)
3.事務提交:commit(事務沒有問題就提交)
4.MySQL資料庫中的事務是預設自動提交
一條DML(增刪改)語句會自動提交一次事務
事務提交的兩種方式,
1.自動提交
MySQL就是自動提交的
一條DML語句會自動提交一次事務
2.手動提交
需要先開啟事務,再提交
*修改事務的預設提交方式
檢視當前事務的預設提交方式:
select @@autocommit;--- 1代表自動提交,0代表手動提交
修改預設提交方式
set @@autocommit = 0/1
2.事務的四大特徵:
1.原子性:是不可分割的最小操作單位;
2.永續性:如果事務一旦提交或者回滾之後資料庫會發生持久化的儲存資料
3.隔離性:多個事務之間,相互獨立.
4.一致性:事務操作前後,資料總量不變.
事務的隔離級別:
概念:多個事務之間隔離的,相互獨立的,但是如果多個事務操作同一批資料,則會英法一些問題,設定不同的隔離級別就可以解決問題.
存在問題:
1.髒讀:一個事務,讀取到另外一個事務中沒有提交的資料
2.不可重複讀(虛讀):同一個事物中,兩次讀取到的資料不一樣
3.幻讀:一個事務操作資料表所有記錄,另一個事務添加了一條資料,則第一個事務查詢不到到自己的修改
隔離級別:
1.read uncommitted:讀未提交
產生的問題:髒讀,不可重複讀,幻讀
2.read committed:讀已提交(Oracle)
產生的問題,髒讀,不可重複讀,幻讀
3.repeatable read :可重複讀(Mysql 預設)
產生的問題:幻讀
4.serializable:序列化
可以解決所有問題
注意:隔離級別從小到大安全性越來越高,但是效率越來越低
今年面試時候被問到資料庫事務是什麼,一臉懵逼,重新補習一下
結合以上,資料庫事務就是多個數據庫表的操作被一個事務管理要麼同時成功,要麼同時失敗。
資料庫事務的四大特性:原子性(不可分割的最小操作單位),隔離性(事務之間相互獨立),永續性(修改後就一直儲存在磁碟當中),一致性(事務操作前後資料總量不變)