mysql特別點 Mysql 特別注意點!

2021-10-18 08:18:45 字數 1423 閱讀 7184

初始環境:create table product (

id int unsigned not null auto_increment,

amount int unsigned default null ,

primary key (id)

) engine = innodb charset =『utf8『;

insert into product values (1,100), (2,200), (3,300), (4,400);

select * from product;

create table product_details (

id int unsigned not null,

weight int unsigned default null ,

exist int unsigned default null ,

primary key (id)

) engine = innodb charset =『utf8『;

insert into product_details values (2,22,0),(4,44,1),(5,55,0),(6,66,1);

select * from product_details;

執行如下兩sql:1、select * from product a left join product_details b on a.id=b.id and a.amount=100;

結果:idamountidweightexist

1100nullnullnull

2200nullnullnull

3300nullnullnull

4400nullnullnull

2、select * from product a left join product_details b on a.id=b.id and a.amount=200;

結果:idamountidweightexist

1100nullnullnull

3300nullnullnull

4400nullnullnull

原因解釋:

首先要清除sql執行順序

首先對a和b表做笛卡爾積生成虛擬表vt1

根據on條件刷選vt1資料生成虛擬表vt2

如果是外連線則需要將保留表中被過濾的的資料(外部行)新增到vt2中生成vt3

具體分析語句1,a b表生成笛卡爾積後根據a.id=b.id and a.amount=100條件刷選,沒有符合條件的行,所以保留表a表的所有行被過濾掉,在新增外部行時a表的所有行被新增到虛擬表中b表的字段都為null,所以就得出結果。

語句2與1過程一致,根據a.id=b.id and a.amount=200刷選出一行結果新增外部行後得出實際結果。

參考:《mysql技術內幕:sql程式設計.姜承堯》

原文:

mysql特別點 常見的MySQL面試點(二)

1.什麼是死鎖?如何解決資料庫死鎖?因為資料庫鎖的最細粒度是行鎖,當乙個開啟事務後,修改某行,在提交事務前,同一行資料在另乙個執行緒也出現了修改。這個時候,後面出現的這個修改語句會發生堵塞,等待前面的事務提交後再開始執行。如果同一時刻兩個執行緒發生這種情況 begin update a 行 upda...

shell雜記 shell特別點

1 shell變數 變數名和等號之間不能有空格 your name runoob.com 唯讀變數定義 readonly you name,在定義後無法被修改 刪除變數 unset your name 獲取字串長度 echo 提取子字串 echo 2 shell陣列 定義陣列用空格隔開或者換行。僅支...

mysql所有表都查詢特別慢 MySQL慢查詢日誌

慢查詢日誌是mysql日誌功能的一種,記錄查詢時間大於預設或設定值的sql語句,也就是記錄執行時間超過long query time值的sql 支援寫入檔案中 mysql資料庫的long query time預設值的10,即10秒。這個值可由我們自己設定。預設情況下,mysql資料庫沒有開啟慢查詢日...