MySQL多表查詢,事務和DCL操作

2021-08-27 03:52:15 字數 2995 閱讀 5101

語法:select * from 表名稱1,表名稱2;

查詢出的條目數 = 表1的條目數 * 表二的臺條目數;

特點:查詢的是表的交集部分;

隱式內連線

語法:select * from 表1,表2 where 條件;

select 要查詢的列(要哪個表的資料就用哪個表.表的列) from 表1(可以取別名),表2 (可以取別名) where 條件;

顯示內鏈結

語法:select * from 表1 inner join 表2 on 條件;(inner 可以省略)

左外連線

語法:select * from 表1 left outer join 表2 on 條件;(outer 可以省略)

結果特點:左表的全部部分+加右表的交集

右外連線

語法:select * from 表1 right outer join 表2 on 條件;(outer 可以省略)

結果特點:右表的全部內容+左表的交集

1.概念:查詢中巢狀查詢,稱巢狀查詢為子查詢;

2.子查詢的不同情況:

1.子查詢的結果是單行單列的:

例如:查詢最高工資的員工

原始做法:

select max(gongzi) from 員工表;

select * from 員工表 where 工資 = 查詢到的結果;

子查詢:

select * from 員工表 where 工資 = (select max(工資) from 員工表);

2.子查詢的結果是多行單列的:

主要查用in(條件1,條件2(也就是子查詢));

3.子查詢的結果是多行多列的:

可以作為乙個虛擬表進行連線查詢;

如果包含多個步驟的操作被事務管理,那麼這些步驟要麼同時成功,要麼同時失敗。
開啟事務 strat transaction;

回滾(出問題了回到開啟事務之前)rollback;

提交(正常執行,提交事務,資料發生改變)commit;

檢視事務的提交方式

select @@autocommit;

修改事務的提交方式

set @@aotocommit=0;-- 0表示手動提交,1表示自動提交

原子性:在事務的多個sql語句都是不可分割的,要麼同時成功,要麼同時失敗;

永續性:發生回滾和提交的時候,資料持久的儲存再硬碟中;

隔離性:多個事務之間,互相沒有影響;

一致性:事務前後的資料總量不會改變;

1.存在的問題:

a.髒讀:乙個事務中未提交的資料被另乙個事務讀取到;

b.虛讀(不可重複讀):乙個事務中,兩次讀取的資料不一樣;

c.幻讀:乙個事務在操作(dml)資料庫中所有的記錄,另乙個事務d.在新增一條新的紀錄,則第乙個事務查詢不到自己的修改;

2.對應的級別:

a.read uncommoted;讀未提交 (出現 「髒讀」,「虛讀」,「幻讀」)

b.read commited;讀已提交(出現 「虛讀」,「幻讀」)oracle資料庫預設隔離級別

c.repeatable read;可重複讀(出現 「幻讀」)mysql資料庫預設隔離級別

d.serializable;序列化 (解決所有問題)

注意:隔離級別隨著等級提公升安全性越高,效率越低;

3.設定和檢視隔離級別

a.檢視隔離級別

select @@tx_isolation;

b.設定隔離級別

set global transaction isolation level 級別字串;

create user '使用者名稱'@'主機名' identified by '密碼';-- 主機名 本機 locahost 任意主機 %
drop user '使用者名稱'@'主機名';
use mysql;

select * from user;

update user set password=password('新密碼') where user= '使用者名稱';

set password for '使用者名稱'@'主機名'=password('新密碼');

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. 使用新密碼登入。

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 許可權

MySql多表查詢 事務

1.準備sql 建立部門表 create table dept id intprimary keyauto increment,name varchar 20 建立員工表 create table emp id intprimary keyauto increment,name varchar 10...

mysql查詢事務和鎖

記錄原因 今天在乙個mysql更新語句的執行過程中,總是執行超時,後來查到原因是因為有乙個事務沒有關閉,導致那條記錄的查詢和更新都會執行超時 以下的sql語句可以查詢當前資料庫,有哪些事務,都鎖定哪些資源 select trx id as 事務id trx state as 事務狀態 trx req...

mysql查詢事務隔離級別命令

1.檢視當前會話隔離級別 select tx isolation 2.檢視系統當前隔離級別 select global.tx isolation 3.設定當前會話隔離級別 set session transaction isolatin level repeatable read 4.設定系統當前隔...