1.笛卡爾積
select*from 表1,表2; -- 計算公式 表1*表2
2.內連線查詢:a.隱式:select*from 表1,表2 where 表1.列1=表2.列2;-- 其中的表可以取別名(常用)
b.顯式:select*from 表1 inner join 表2 on 表1.列1=表2.列2;-- inenr可以省略
①.特點 兩表交集部分取資料多的
②.兩表內連線查詢的時候 最多的結果數是交集多的 最少0條(完全不相交)
3.外連線查詢a.左外連線:select*from 表1 left outer join 表2 on 表1.列1=表2.列2;-- outer可以省略 特點:左表的全部內容+左右表的交集
b.右外連線:select*from 表1 right outer join 表2 on 表1.列1=表2.列2;-- outer可以省略 特點:右表的全部加上左右表的交集
c.例如:兩個表左外連線查詢的時候,
表1有5條資料,表2有10條資料
左表是 表1,右表是 表2
最多14條,最少5條
4.子查詢:乙個查詢語句的結果是下乙個查詢語句的條件.a.乙個查詢語句的結果是下乙個查詢語句的條件.
查到的最高工資的員工作為條件
select * from yuangong where gongzi = (select max(gongzi) from yuangong);
b.多行單列,主要採用的 in(選項1,選項2,選項3)
查詢到的市場部和財務部的id作為條件
select * from yuangong where id in (select id from yuangong where name in ('財務部','市場部'));
c.多行多列,作為虛擬表,進行的連線查詢.
(**都是舉例的相應替換就好) 查詢入職日期是2011-11-11日之後的員工資訊和部門資訊
①:子查詢結果
select * from bumen t1 ,(select * from yuangong where yuangong.join_date > '2011-11-11') t2 where t1.id = t2.bumen_id;
②:普通內連線
select * from bumen t1 , yuangong t2 where t1.id = t2.bumen_id and t2.join_date > '2011-11-11';
5、多表查詢的分析思路:a.確定查詢的表 from 表名稱...
b.查詢的條件 where 條件... ---> 需要檢視表結構(主外來鍵) 大小...
c.查詢的結果 select 結果...
1、事務的概念在多個操作的sql語句當中,要麼同時成功執行,要麼同時失敗執行。
2、操作步驟:a.開啟事務 start transaction
b.回滾(出問題了,需要回到開啟事務之前) rollback
c.提交(正常執行,將改變的資料提交結束事務) commit
3、檢視和修改事務的提交方式a.檢視事務的提交方式 select @@autocommit;
b.修改事務的提交方式 set @@autocommit = 0; -- 0表示手動提交,1表示自動提交
4、事務的四大特徵a.原子性: 在事務的多個sql語句當中,不可以分割開來
b.永續性: 發生回滾和提交的時候,資料持久的儲存在硬碟上面
c.隔離性: 盡可能的多個事務之間沒有影響
d.一致性: 事務前後的總量不能改變
5、隔離級別a.存在問題
a.髒讀:事務x讀取到事務y,未提交的資料.
b.虛讀(不可重複讀):在同乙個事務當中,兩次讀取的資料不一樣。
c.幻讀:事務x在運算元據庫當中所有的記錄,事務y在新增一條新的記錄。事務x讀取不到自己的修改
b.對應的級別
a. read uncommited 讀未提交 (出現"髒讀","虛讀","幻讀")
b. read commited 讀提交 (出現"虛讀","幻讀") ---> oracle 預設採用
c. repeatable read 可重複讀 (出現"幻讀") ---> mysql 預設採用
d. serializable 序列化 (可以解決所有問題,效率低)
c.設定和檢視隔離級別
a.檢視隔離級別
select @@tx_isolation;
b.設定隔離級別
set global transaction isolation level 級別字串;
1、建立使用者(賬號密碼)語法: create user '使用者名稱'@'主機名' identified by '密碼'; -- 主機名 本機 localhost 任意主機 %
2、刪除使用者(賬號)語法: drop user '使用者名稱'@'主機名';
3、修改使用者密碼語法1: update user set password = password('新密碼') where user = '使用者名稱';
語法2: set password for '使用者名稱'@'主機名' = password('新密碼');
4、查詢使用者(賬號密碼)語法: use mysql; select * from user; -- 先要使用mysql自己的資料庫,然後查詢user表
5、忘記了超級管理員使用者密碼之後的解決方案:a. cmd 輸入 net stop mysql -- 停止mysql服務 需要管理員執行該cmd
b. 使用無驗證方式啟動mysql服務: mysqld --skip-grant-tables
c. 開啟新的cmd視窗,直接輸入mysql命令,敲回車。就可以登入成功
d. use mysql;
e. update user set password = password('你的新密碼') where user = 'root';
f. 關閉兩個視窗
g. 開啟任務管理器,手動結束mysqld.exe 的程序
h. 啟動mysql服務
i. 使用新密碼登入。
6、資料庫許可權a.查詢許可權
語法: show grants for '使用者名稱'@'主機名';
b.授予許可權
語法: grant 許可權列表 on 資料庫名.表名 to '使用者名稱'@'主機名'; -- 標準格式
語法: grant all on *.* to 'zhangsan'@'localhost'; -- 給張三本機使用者授予所有的許可權
c.撤銷許可權
語法: revoke 許可權列表 on 資料庫名.表名 from '使用者名稱'@'主機名';
案例: revoke update on db3.`account` from 'lisi'@'%'; -- 撤銷李四在所有機器上面的 update 許可權