操作mysql的命令 cmd命令行中查看mysql版本: mysql -V mysql --version 登陸mysql: mysql -uroot -pluis mysql -uroot -p 在mysql中查看資料庫版本: select version(); 查看所有資料庫: show dat ...
------------------ 操作mysql的命令 --------------------
cmd命令行中查看mysql版本:
mysql -V
mysql --version
登陸mysql:
mysql -uroot -pluis
mysql -uroot -p
在mysql中查看資料庫版本:
select version();
查看所有資料庫:
show databases;
切換資料庫:
use xxx;
查看當前庫中的表:
show tables;
查看其他庫中的表:
show tables from 庫名;
創建資料庫:
create database xxx;
刪除資料庫:
drop database xxx;
導表:(需要先有資料庫)
source sql腳本;
查看表結構:
desc 表名;
查看當前庫:
select database();
終止一條語句:
\c
退出mysql:
exit 或 Ctrl + c
查看某建表語句:
show create table 表名;
------------------ SQL語句 --------------------
條件查詢 between and
條件查詢 is null 和 is not null
and or
條件查詢 in
模糊查詢 like
數據排序 desc 和 asc
分組函數 group by
多欄位分組查詢
group by 之 having 二次過濾
去除重覆記錄 distinct
判空函數 ifnull()
內連接、外連接、全連接
內連接:等值連接、非等值連接、自連接
外連接:左外連接、右外連接
多表連接查詢
夠用測試題:找出每一個員工的部門名稱、工資等級以及上級領導(內連接和外連接之多表查詢)
select、where、from 後嵌套子查詢(from後接子查詢用的最多)
union 數據拼接
分頁查詢 limit mysql特有
desc asc 預設升序
count() 分組函數/多行處理函數
分組函數(sum,count,max,min,avg)自動忽略null
分組函數不可直接用於while子句中,因為分組函數是在group by之後執行,而group by是在while之後執行
ifnull() 空處理函數 有null參與的運算結果都為null
count() 和 count(欄位) 區別:
count(*) 統計總記錄條數
count(欄位) 統計不為null的該欄位記錄的條數
分組函數一般都會和group by聯合使用
重要結論:當一條語句後面有group by的話,select後面只能跟分組函數和參與分組的欄位,其他
欄位不能跟,有的話會有問題!(mysql中無意義,oracle中直接報錯。)
多欄位聯合分組:group by後使用逗號分隔,按照欄位先後順序進行分組。
查詢結果去重用distinct關鍵字
distinct出現在多欄位最前面表示多欄位聯合去重
建表create、添加數據insert、修改數據update、刪除數據delete、刪除大表中數據truncate(留表頭,刪其他數據,不可回滾,永久刪除)
表的複製create as select、表的刪除drop
總結 DQL 語句執行順序:
select 5
xxx
from 1
xxx
where 2
xxx
group by 3
xxx
having 4
xxx
order by 6
xxx;
約束:
非空約束: not null 只存在列級
唯一性約束:unique 列級&表級(唯一不可重覆,但是可以為null)
主鍵約束:primary key 列級&表級(唯一不可重覆,且不可為null)
外鍵約束:foreign key(欄位) reference 表名(一般填父表主鍵)
原則:
刪除:先刪除子表,再刪除父表
建表:先創建父表,再創建子表
主鍵自增:primary key auto_increment
三大搜索引擎:
MyISAM(不支持事務,但可壓縮,占空間小,最常用的)
InnoDB(支持事務,安全,但執行效率較低,mysql預設引擎)
MEMORY(不支持事務,但查詢效率最高,數據存在記憶體中,斷電清空)
事務四大特性:
原子性:最小單元,不可再分
一致性:同時成功,同時失敗
隔離性:四大隔離級別(讀未提交、讀已提交[oracle預設]、可重覆讀[mysql預設]、串列化讀)
使用分組函數後,查詢的時候只允許有參與分組的欄位和分組函數,其他欄位不允許寫,
寫了的話,其結果顯示無意義。在oracle中會報錯!
DQL 數據查詢語言 (Date Query Language) select
DML 數據操控語言 (Date Manipulation Language) insert delete update
DDL 數據定義語言 (Date Definition Language) create drop alter
TCL 事務控制語言 (Transactional Control Language) commit rollback
DCL 數據控制語言 (Data Control Language) grant revoke
資料庫設計三範式:
第一範式:所有表必須有主鍵,每個欄位原子性不可再分
第二範式:所有非主鍵欄位完全依賴主鍵,不能產生部分依賴
第三範式:所有非主鍵欄位完全依賴主鍵,不能產生傳遞依賴
口訣:
多對多,三張表,關係表兩個外鍵。
一對多,兩張表,多的表加外鍵。
目的:減少數據冗餘
提醒:實際開發中,以滿足客戶需求為主,有時候會拿冗餘換執行速度。
(多表聯查會降低執行速度,放一起雖然冗餘,但效率有時會高一些)
一對一設計兩種方案:主鍵共用、外鍵唯一
情景:用戶登錄和用戶詳情,登錄單獨出一張表就不用查全部信息。
分組函數是在分完組後可用,所以可以用在having二次過濾中!!!
select
deptno,count(*)
from
emp
group by
deptno
having
count(*) >= 5;