日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MYSQL多表查询与事务

發(fā)布時間:2025/3/15 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MYSQL多表查询与事务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

多表查詢

?

避免笛卡爾積

?

?

?

select * from emp,dept where emp.`dept_id` = dept.`id`;#設(shè)置過濾條件(隱式內(nèi)連接)

select emp.`name`, dept.`name` from emp,dept where emp.`dept_id` = dept.`id`;#查詢姓名和部門

?

select * from emp e inner join dept d on e.`dept_id` = d.`id`;#顯式內(nèi)連接

select * from emp e inner join dept d on e.`dept_id` = d.`id` where e.`name`='唐僧';#添加過濾條件

select e.`id`,e.`name`,e.`gender`,e.`salary`,d.`name` from emp e inner join dept d on e.`dept_id` = d.`id` where e.`name`='唐僧';顯式內(nèi)連接并顯示指定列

select e.`id` 編號,e.`name` 姓名,e.`gender` 性別,e.`salary` 工資,d.`name` 部門名字 from emp e inner join dept d on e.`dept_id` = d.`id` where e.`name`='唐僧';#修正表頭

?

select * from dept d left join emp e on d.`id` = e.`dept_id`;#左外連接查詢。

?

?

?

select * from dept right join emp on dept.`id` = emp.`dept_id`;#右外連接查詢

?

?

?

嵌套查詢

select * from emp where dept_id = (select id from dept where name='市場部');#使用子查詢

子查詢只有一個值的時候

select * from emp where salary = (select max(salary) from emp);#查詢最高薪水對應(yīng)的姓名

select * from emp where salary < (select avg(salary) from emp);#小于平均工資的員工

?

?

子查詢有多個值的時候使用in

select name from dept where id in (select dept_id from emp where salary > 5000);#薪水大于5k的部門

select * from emp where dept_id in (select id from dept where name in('開發(fā)部','財務(wù)部'));#查詢部門人員

?

子查詢是多行多列的時候使用FROM后面作為表進(jìn)行二次查詢

?

select * from dept d, (select * from emp where join_date >='2011-1-1') e where d.`id`= e.dept_id ;#子查詢作為表需要取別名,否則這張表沒有名稱則無法訪問表中的字段

或:

select * from emp inner join dept on emp.`dept_id` = dept.`id` where join_date >='2011-1-1';

select * from emp inner join dept on emp.`dept_id` = dept.`id` and join_date >='2011-1-1';

?

?

事務(wù)

?

?

?

?

?

手動提交事務(wù)

start transaction;

update account set balance = balance - 500 where name='張三';

update account set balance = balance + 500 where name='李四';

commit;#執(zhí)行完commit數(shù)據(jù)才真正發(fā)生改變

?

start transaction;

update account set balance = balance - 500 where name='張三';

rollback;#執(zhí)行過程中使用rollback表示執(zhí)行錯誤并回滾到原始狀態(tài)

?

自動提交事務(wù)

?

?

?

查看是否自動提交:

select @@autocommit;# @@表示全局變量,結(jié)果為1表示開啟,0表示關(guān)閉。

set @@autocommit=0;#關(guān)閉自動提交

update account set balance=balance+500 where id=2;

commit;#手動提交

?

?

?

?

回滾點(diǎn)

?

?

?

在某些成功的操作完成之后,后續(xù)的操作有可能成功有可能失敗,但是不管成功還是失敗,前面操作都已經(jīng)成功,可以在當(dāng)前成功的位置設(shè)置一個回滾點(diǎn)。可以供后續(xù)失敗操作返回到該位置,而不是返回所有操作,這個點(diǎn)稱之為回滾點(diǎn)。

?

事務(wù)與隔離

?

?

?

?

?

set global transaction isolation level read uncommitted;#設(shè)置事務(wù)隔離級別為讀未提交

讀未提交時,當(dāng)A對數(shù)據(jù)進(jìn)行操作但未提交時,B讀取的信息是未提交信息,可能不一致。

讀已提交時,當(dāng)A對數(shù)據(jù)進(jìn)行操作但未提交時,B讀取的信息是原始信息,不出現(xiàn)臟讀。

讀已提交時,當(dāng)A對數(shù)據(jù)進(jìn)行操作已提交時,B讀取的信息在A提交前后兩次讀取不一致,出現(xiàn)不可重復(fù)讀。

使用serializable隔離級別,一個事務(wù)沒有執(zhí)行完,其他事務(wù)的SQL執(zhí)行不了,可以擋住幻讀

?

?

?

?DCL語句

?

mysqld是MySQL的主程序,服務(wù)器端。mysql是MySQL的命令行工具,客戶端。

?

?

?

創(chuàng)建用戶user1密碼123只能在本機(jī)使用:

create user 'user1'@'localhost' identified by '123';

創(chuàng)建用戶user1密碼123可以在任何計算機(jī)使用:

create user 'user2'@'%' identified by '123';

?

grant create,alter,insert,update,select on test.* to 'user1'@'localhost';#給user1分配到test數(shù)據(jù)庫的部分權(quán)限

grant all on *.* to 'user2'@'%';#給user2分配到所有數(shù)據(jù)庫的所有表權(quán)限

revoke all on test.* from 'user1'@'localhost';#撤銷user1用戶對test數(shù)據(jù)庫所有表的操作權(quán)限

show grants for 'user1'@'localhost';#查詢用戶權(quán)限,usage是指登錄權(quán)限

drop user 'user1'@'localhost';#刪除用戶user1

mysqladmin -uroot -p password 1#修改管理員的用戶密碼為1(登出狀態(tài)使用)

set password for 'user2'@'%'=password('1');#修改普通用戶user1的密碼為1

?

轉(zhuǎn)載于:https://www.cnblogs.com/bai2018/p/11469425.html

總結(jié)

以上是生活随笔為你收集整理的MYSQL多表查询与事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。