視圖、事物
阿新 • • 發佈:2018-11-10
數據一致性 style img 就是 沒有 轉賬 view nod 數據
視圖
- 對於復雜的查詢,在多個地方被使用,如果需求發生了改變,需要更改sql語句,則需要在多個地方進行修改,維護起來非常麻煩
- 解決:定義視圖
- 視圖本質就是對查詢的封裝
- 定義視圖,建議以v_開頭
create view 視圖名稱 as select語句;
- 查看視圖:查看表會將所有的視圖也列出來
show tables;
- 刪除視圖
drop view 視圖名稱;
例:
drop view v_stu_score_course;
- 使用:視圖的用途就是查詢
select * from v_stu_score_course;
例:
學生表
班級表
create view v_student_info as select classes.c_name as ‘班級‘, students.name as ‘學生‘ from students inner join classes on students.cls_id=classes.id order by classes.id;
事務
為什麽要有事務
- 事務廣泛的運用於訂單系統、銀行系統等多種場景
- 例如:A用戶和B用戶是銀行的儲戶,現在A要給B轉賬500元,那麽需要做以下幾件事:
- 檢查A的賬戶余額>500元;
- A 賬戶中扣除500元;
- B 賬戶中增加500元;
- 正常的流程走下來,A賬戶扣了500,B賬戶加了500,皆大歡喜。那如果A賬戶扣了錢之後,系統出故障了呢?A白白損失了500,而B也沒有收到本該屬於他的500。以上的案例中,隱藏著一個前提條件:A扣錢和B加錢,要麽同時成功,要麽同時失敗。事務的需求就在於此
- 所謂事務,它是一個操作序列,這些操作要麽都執行,要麽都不執行,它是一個不可分割的工作單位。例如,銀行轉帳工作:從一個帳號扣款並使另一個帳號增款,這兩個操作要麽都執行,要麽都不執行。所以,應該把他們看成一個事務。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性
事務命令
- 要求:表的引擎類型必須是innodb類型才可以使用事務,這是mysql表的默認引擎
- 查看表的創建語句,可以看到engine=innodb
show create table students;
-
修改數據的命令會觸發事務,包括insert、update、delete
-
開啟事務,命令如下:
- 開啟事務後執行修改命令,變更會維護到本地緩存中,而不維護到物理表中
begin;
- 提交事務,命令如下
- 將緩存中的數據變更維護到物理表中
commit;
- 回滾事務,命令如下:
- 放棄緩存中變更的數據
rollback;
視圖、事物