目錄
⼀、⾼級
1.1 ⼦查詢
- ⼦查詢嵌⼊到其他查詢語句中查詢語句,⼦查詢只能出現在from, where、having中
- ⼦查詢不要⽤select *,exists除外
select title from forum where uid in (select id from php_user where name = '王坤');
select * from blog_article where cid in(select cid from blog_category where name='心情');
select * from (select uid,username,gender from blog_user where gender='男') as user;
1.2 多表查詢
- 多表連接必須要有連接條件,否則結果沒有意義
- 多表連接有兩種寫法:隱式(標準sql)和顯式內連接
- 隱式(標準sql)連接 : 連接條件寫到where字句中
select title,content,name,publish_time
-> from user u,forum f #給表起⼀個別名,⽅便書寫
-> where u.id = f.uid; 在where寫鏈接條件
select title,content,name,publish_time
-> from user u,forum f
-> where u.id = f.uid and name='王琨';
select a.username,b.name ,c.title
-> from bbs_user a,bbs_category b,bbs_forum c
-> where b.cid = c.cid and c.uid = a.uid;
- 顯示內連接(inner join)
- 表的⾃身連接
select * from areainfo a,areainfo b where a.pid= b.code and a.name='青河縣';
1.3 外連接
兩張表關聯查詢時,根據以那種表爲主可以分爲左外連接和右外連接
- 左外連接
以左表爲主,如果右邊的表⾥沒有匹配的記錄,則添加⼀個萬能記錄(各個字段都爲null)與之連接
- 右外連接(right join)
以右表爲主,如果左邊的表裏沒有匹配記錄,則增加一個萬能記錄與之連接
1.4 集合操作
可以使⽤union將兩個查詢結果合併, mysql只⽀持並,不⽀持差和交
- 兩個結果集中字段數⼀樣,對應字段類型兼容
- ⾃動去除重複記錄,不去除重複記錄可以⽤ union all
- order by 放到最後
1.5 內部函數
- 字符串函數
- ⽇期函數
select DATE_FORMAT(now(),'%Y- %m-%d %H:%i:%s');
- 數學函數
- 其它函數
⼆、數據控制
2.1 事務
- 事務把⼀組操作看做⼀個整體,要不都操作成功,要不都操作失敗 。 (ACID)
- 表的數據庫引擎必須是innodb, innodb⽀持事物, myisam不⽀持事務
- 修改表引擎: alter table 表名 engine = innodb
-- 查詢是否爲⾃動提交
select @@autocommit #(1爲⾃動提交 0爲⼿動提交)
-- 關閉⾃動提交
set autocommit = 0
start transaction /begin
-- ⼀組操作
commit/rollback
commit #提交 會把數據寫到硬盤
rollback #回滾 撤銷操作 撤銷從begin到這一條命令之間的操作
2.2 授權管理
- 創建⽤戶
create user '⽤戶名'@'服務器地址' identified by '密碼'
- 刪除⽤戶
drop user '⽤戶名'@'服務器地址'
修改密碼
- 刷新
flush privileges