MySQL查詢和事務
資料庫關聯查詢
內連線查詢(inner join)
SELECT * FROM tb1 INNER JOIN tb2 ON 條件
左表查詢(左關聯查詢)(left join)
查詢兩個表共有的資料,和左表所有的資料,左表有右表沒有的部分用null代替
SELECT * FROM tb1 LEFT JOIN tb2 ON 條件
右表查詢(右關聯查詢)(right join)
查詢兩個表共有的資料,和右表表所有的資料,右表有左表沒有的部分用null代替
SELECT * FROM tb1 RIGHT JOIN tb2 ON 條件
多表(三表)關聯查詢
1、內關聯查詢
select * from major inner join major_course inner join course where
major.id = major_course.major_id and major_course.course_id = course.id
and major.id= 1;
2、關聯子查詢
SELECT
name
FROM
major
WHERE
id IN (
SELECT
mc.major_id
FROM
course AS c
LEFT JOIN major_course AS mc ON c.id = mc.course_id
WHERE
c.id = 1
);
事務
建立新的資料庫名為bank
create database bank;
在bank資料庫中建立新的表名為user
create table user(
id int primary key,
name varchar(20),
money int);
往user表中新增資料
insert into user values(1,'a',1000);
檢視是否新增成功
select * from user;
回滾(就是撤銷sql語句執行的效果)
rollback;
驗證sql的語句執行的效果是否撤銷
select * from user;
如果想要讓回滾有效的話需要關閉事務(關閉mysql的自動提交)
set @@autocommit=0;
select @@autocommit;
驗證回滾:
a再插入一條資料
insert into user values(2,'b',1000);
b檢視此時的user表
select * from user;
c回滾
rollback;
d檢視
select * from user;
e
重複上述操作
f由於關閉了自動提交功能,現在手動提交
commit;
g再回滾查看錶(顯然回滾失效了)
【總結】
事務:
——自動提交:@@autocommit=1;
——手動提交:commit;
——回滾:rollback;
事務是以兩種方式存在的:一是手動開啟事務,二是預設(自動)開啟事務
手動開啟事務給我們提供了一個修改的機會,如果操作失敗的話可以通過回滾,實現修改,如果操作成功可以手動提交(commit)增加資料的安全性
3、事務的四大特徵
A 原子性:事務是最小的單位,不可以再進行分割了
C 一致性:事務要求同一事務中的sql語句,必須保證同時成功或者同時失敗
I 隔離性:事務1與事務2之間具有隔離性(後面詳解)
D 永續性:事務一旦結束(commit),就不可以返回(rollback)
4、事務的隔離性
(1)read uncommitted 讀未提交的
(2)read committed 讀已提交的
(3)repeatable read 可以重複讀
(4)serializable 序列化