1. 程式人生 > 實用技巧 >MySQL查詢和事務

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 序列化