1. 程式人生 > 其它 >C++ primer學習筆記——p39-p54

C++ primer學習筆記——p39-p54

1. 手寫常用的sql語句
# 建立資料庫
create database school;
# 檢視資料庫
show databases;
# 刪除一個庫
drop database school;
# 使用某一個數據庫
use school;
# 檢視當前資料庫所包含的表
show tables;
# 建立表
create table teacher(
    id int not null primary key auto_increment,
    name varchar(128) not null ,
    age int not null,
    address varchar
(256) not null )engine=innodb default charset=utf8; # 檢視建表語句 show create table teacher; # 描述表的欄位及其型別 desc teacher; # 刪除一個表 drop table teacher; # 新增一條資料 insert into teacher(name,age,address) values ('金掌櫃',25,'廣東深圳'); # 修改資料 update teacher set address = '廣東湛江吳川' where id = 1; # 查詢資料 select * from teacher;
# 刪除資料 delete from teacher where id = 1; # 新增一列 alter table teacher add column sex bit(1); # 修改一列 alter table teacher modify column sex varchar(8); # 刪除一列 alter table teacher drop column sex; # 建立索引 create index index_name on teacher(name); # 刪除索引 drop index index_name on teacher; # 連表查詢 select * from
teacher a inner join teacher_class b on a.id = b.teacher_id inner join class c on b.class_id = c.id; # 查詢執行計劃 explain select * from teacher;

思考

  1. 這道題重點考面試者的基礎,得又快又準確得默寫出來,猶豫你就會敗北!!!
  2. 默寫完之後,你得主動簡述一下你的細節之處,比如簡單提一下update/delete語句需要新增查詢條件,查詢的時候最好用上索引,連表查詢的時候儘量不用笛卡爾連線等等
  3. 這道題僅僅是面試資料庫的一個引子而已,後面可以展開問你索引、事務、日誌、執行計劃、優化技巧等等問題
2. 內連線/左連線/左外連線/右連線/右外連線/自然連線/外連線/笛卡爾連線,這幾個名詞都是什麼意思?

為了說明這幾個連線的關係,我特意準備了三張表,分別是教師表teacher,班級表class,描述教師班級關係的中間表teacher_class。目前教師表只有一個老師,班級只有1年級的三個班,關係表則記錄了金掌櫃老師所帶的兩個班

select * from teacher
在這裡插入圖片描述
select * from class

select * from teacher_class
在這裡插入圖片描述

內連線

內連線,也即 inner join,其中 inner 可以省略,描述的是兩個表中均滿足特定條件的那一部分資料

select * from teacher a inner join teacher_class b on a.id = b.teacher_id;
在這裡插入圖片描述

如上,此次查詢的條件是a.id = b.teacher_id,由於a表中找不到a.id = 2的教師,所以b表中第三條資料不會顯示出來

左連線/左外連線

左外連線,也即左連線,因為left join 是left outer join的簡寫,是外連線中的一種。 左(外)連線,左表的記錄將會全部展示出來,而右表只會顯示符合條件的記錄,不符合的地方均以NULL值代替

為了演示這個現象,我特意加了一條資料

insert into teacher(id, name, age, address, sex) values(3,'水生',21,'廣東湛江吳川','man');
select * from teacher a  left join teacher_class b on a.id = b.teacher_id;

在這裡插入圖片描述

注意

沒有左內連線這個東西

右連線/右外連線

右連線和左連線描述的是相反的現象,右連線時左邊不滿足條件的資料會以NULL值填充

select * from teacher a  right join teacher_class b on a.id = b.teacher_id;

在這裡插入圖片描述

注意

沒有右內連線這個東西

自然連線

自然連線,也即natural join,描述的是兩個表中相同列名等值查詢關係

select * from teacher a natural join teacher_class b ;

因為teacher表和teacher_class表有共同的列id,並且恰好兩個表中都有id = 1 和 id = 3的資料,所以你會查到如下這麼一個結果

在這裡插入圖片描述

日常開發中,很少會用到natural join,因為即使描述的是同一個東西,但在不同的表中它的命名可能是不一樣的,比如teacher表中的id和teacher_class表中teacher_id,這兩個欄位描述的是同一個東西,但他們有不同的命名

外連線

外連線,細分為左外連線和右外連線,例子如上

笛卡爾連線

笛卡爾連線描述的是左表中任意一條資料均會與右表中的每一條資料關聯一次,假設左表有2條資料,右表也有3條資料,最終會產生6條資料的結果集

在這裡插入圖片描述

思考

  1. 如果inner join/left join/right join不加on條件,它們就會演變成笛卡爾連線的效果
  2. select * from a inner join b on a.id = b.id where 1=1select * from a,b where a.id = b.id的區別是啥?區別在於執行where部分時,記憶體中參與where條件計算的資料的數量不一樣
3. 事務的四個特性
  • Atomicity:原子性,事務被視為不可分割的最小單元,事務的所有操作要麼全部成功,要麼全部失敗回滾。
  • Consistency:一致性,資料庫在事務執行前後都保持一致性狀態,在一致性狀態下,所有事務對一個數據的讀取結果都是相同的。
  • Isolation:隔離性,一個事務所做的修改在最終提交以前,對其他事務是不可見的。
  • Durability:永續性,一旦事務提交,則其所做的修改將會永遠儲存到資料庫中。即使系統發生崩潰,事務執行的結果也不能丟。