1. 程式人生 > 實用技巧 >MySql學習---資料庫基本型別,事務,多表查詢

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

顯示內連線

  1. ​ 語法: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:序列化

​ 可以解決所有問題

​ 注意:隔離級別從小到大安全性越來越高,但是效率越來越低

今年面試時候被問到資料庫事務是什麼,一臉懵逼,重新補習一下

  結合以上,資料庫事務就是多個數據庫表的操作被一個事務管理要麼同時成功,要麼同時失敗。

資料庫事務的四大特性:原子性(不可分割的最小操作單位),隔離性(事務之間相互獨立),永續性(修改後就一直儲存在磁碟當中),一致性(事務操作前後資料總量不變)