1.準備sql:
# 建立部門表create
table
dept(
id intprimary
keyauto_increment,
name
varchar(20
) );
# 建立員工表
create
table
emp (
id intprimary
keyauto_increment,
name
varchar(10
), gender
char(1), --
性別 salary double, --
工資 join_date date, --
入職日期
dept_id int
,
foreign
key (dept_id) references dept(id) --
外來鍵,關聯部門表(部門表的主鍵)
);
2.多表查詢的分類
2.1.內連查詢
隱式內連:
--查詢所有員工資訊和對應的部門資訊
select
*from emp,dept where emp.`dept_id` =
dept.`id`;
--查詢員工表的名稱,性別。部門表的名稱
select emp.name,emp.gender,dept.name from emp,dept where emp.`dept_id` = dept.`id`;
顯示內連:
* 語法: select 字段列表 from 表名1 [inner
]join 表名2 on
條件
*例如:
select
*from emp inner
join dept on emp.`dept_id` = dept.`id`;
2.2.外連線
左外連線:
--語法:select 字段列表 from 表1 left [outer] join 表2 on 條件;
--查詢的是左表所有資料以及其交集部分。
--查詢所有員工資訊,如果員工有部門,則查詢部門名稱,沒有部門,則不顯示部門名稱
select t1.*,t2.`name` from emp t1 left
join dept t2 on t1.`dept_id` = t2.`id`;
右外連線
--語法:select 字段列表 from 表1 right [outer] join 表2 on 條件;
--查詢的是右表所有資料以及其交集部分。
select
*from dept t2 right
join emp t1 on t1.`dept_id` = t2.`id`;
1.概念
* 如果乙個包含多個步驟的業務操作,被事務管理,那麼這些操作要麼同時成功,要麼同時失敗。
2.操作
1)開啟事務: start transaction;
2)回滾:rollback;
3)提交:commit;
3.mysql資料庫中事務預設自動提交
* 事務提交的兩種方式:
* 自動提交:『
* mysql就是自動提交的
* 一條dml(增刪改)語句會自動提交一次事務。
* 手動提交:
* oracle 資料庫預設是手動提交事務
* 需要先開啟事務,再提交
* 修改事務的預設提交方式:
* 檢視事務的預設提交方式:select @@autocommit; -- 1 代表自動提交 0 代表手動提交
* 修改預設提交方式: set @@autocommit = 0;
4. 事務的四大特徵:
1. 原子性:是不可分割的最小操作單位,要麼同時成功,要麼同時失敗。
2. 永續性:當事務提交或回滾後,資料庫會持久化的儲存資料。
3. 隔離性:多個事務之間。相互獨立。
4. 一致性:事務操作前後,資料總量不變
5.不考慮隔離性會產生的三個問題?
1)髒讀:b事務讀取到了a事務尚未提交的資料 ------ 要求b事務要讀取a事 務提交的資料
2)不可重複讀:乙個事務中 兩次讀取的資料的內容不一致 ----- 要求的是乙個事 務中多次讀取時資料是一致的 --- unpdate
3)幻讀/虛讀:乙個事務中 兩次讀取的資料的數量不一致 ----- 要求在乙個事務多 次讀取的資料的數量是一致的 --insert delete
6.四種隔離級別
1)read uncommitted : 讀取尚未提交的資料 :哪個問題都不能解決
2)read committed:讀取已經提交的資料 :可以解決髒讀 ---- oracle預設的
3)repeatable read:重讀讀取:可以解決髒讀 和 不可重複讀 ---mysql預設的
4)serializable:序列化:可以解決 髒讀 不可重複讀 和 虛讀---相當於鎖表
MySQL多表查詢,事務和DCL操作
語法 select from 表名稱1,表名稱2 查詢出的條目數 表1的條目數 表二的臺條目數 特點 查詢的是表的交集部分 隱式內連線 語法 select from 表1,表2 where 條件 select 要查詢的列 要哪個表的資料就用哪個表.表的列 from 表1 可以取別名 表2 可以取別名...
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.設定系統當前隔...