總結資料庫
1.1 為什么要使用資料庫?
1.持久化:將記憶體中的資料存盤在資料庫中
方便管理資料
1.2 什么是資料庫
DB:資料庫保存了一系列有組織的資料
DBMS:資料管理系統
mysql 是一種開放源代碼的關系型資料庫管理系統
Mysql的邏輯架構與存盤引擎
1.連接層
2.服務層
3.引擎層(最與眾不同)
4.存盤層
MySQL的資料型別
-
整型(xxxint)
-
位型別(bit)
-
浮點型(float和double、real)
-
定點數(decimal,numeric)
-
日期時間型別(date,time,datetime,year)
-
字串(char,varchar,xxxtext)
-
二進制資料(xxxBlob、xxbinary)
-
列舉(enum)
特殊的NULL值
Null特征:
(1)所有的型別的值都可以是null,包括int、float等資料型別
(2)空字串"",不等于null,0也不等于null,false也不等于null
(3)任何運算子,判斷符碰到NULL,都得NULL
(4)NULL的判斷只能用is null,is not null
(5)NULL 影響查詢速度,一般避免使值為NULL
面試:
為什么建表時,加not null default '' 或 default 0
答:不想讓表中出現null值.
為什么不想要的null的值
答:(1)不好比較,null是一種特殊值,比較時,只能用專門的is null 和 is not null來比較.
碰到運算子,一律回傳null
(2)效率不高,影響提高索引效果.
因此,我們往往,在建表時 not null default '' 或 default 0
SQL
sql :structure query language 結構化查詢語言
sql分類:
DDL:資料定義語言, 關鍵字 create,drop alter
DML: 資料操作語言,用于添加,洗掉,更新,查詢 insert,delete,update,select
DCL:資料控制陳述句 關鍵字 grant,revoke
約束:constraints
資料完整性是指資料的精確性 和可靠性
從4個方面考慮:物體完整性,域完整性,參考完整性,用戶自定義完整性
約束分為 主鍵約束,primary key
外鍵約束,foreign key
唯一鍵約束 unique key
not nulL 約束 非空約束 d7802f253cc0412391d73964577db44e.doc
check 檢查約束 age int check(age>0) sex char(2) (sex in('男',“女”))
default 預設約束 is_actived int default 1
索引index
索引:索引是一個單獨的,物理的資料庫結構,索引是要消耗資料庫空間的,而約束是一種邏輯概念
索引好處:加快了查詢的速度
索引壞處:降低了增刪改的速度,增大了表的檔案大小(索引檔案甚至可能比資料檔案大)
mysql提供了多種 索引型別選擇:
1》普通索引
2》唯一性索引
3》主鍵索引
4》全文索引
自增列 auto_increment
關于自增長auto_increment:
(1)整數型別的欄位才可以設定自增長,
(2)當需要產生唯一識別符號或順序值時,可設定自增長,
(3)一個表最多只能有一個自增長列
(4)自增長列必須非空
(5)自增長列必須是主鍵列或唯一鍵列,
(6)InnoDB表的自動增長列可以手動插入,但是插入的值如果是慷訓者0,則實際插入的將是自動增長后的值,
DML操作
資料操縱語言(DML)DML用于插入、修改、洗掉資料記錄,包括如下SQL陳述句:
INSERT:添加資料到資料庫中
UPDATE:修改資料庫中的資料
DELETE:洗掉資料庫中的資料
去重DISTINCT(distinct)
select distinct dept_id from t_employe;
笛卡爾積
定義:將兩個(或多個)表的所有行進行組合,連接后的行數為兩個表的乘積數
在MySQL中如下情況會出現笛卡爾積,主要是因為缺少關聯條件或者關聯條件不準確
關聯條件
表鏈接的約束條件有三種方式:where,on,using
where: 適用于所有關聯查詢
-
ON:只能和JOIN一起使用,只能寫關聯條件,雖然關聯條件可以并到WHERE中和其他條件一起寫,但分開寫可讀性更好,
-
USING:只能和JOIN一起使用,而且要求兩個關聯欄位在關聯表中名稱一致,而且只能表示關聯欄位值相等
自連接
當table1和table2本質上是同一張表,只是用取別名的方式虛擬成兩張表以代表不同的意義,然后兩個表再進行內連接,外連接等查詢
select的5個句子
where條件查詢
group by 分組查詢
聚合函式 avg,count,min,max,sum
having篩選
having與where不同點
where針對表中的列發揮作用,查詢資料,having針對查詢結果中的列的發揮作用
where后面不能寫分組函式,而 having后面可以使用分組函式
having只用于group by 分組統計陳述句
order by 排序
按一個或多個欄位對查詢結果進行查詢
#查詢員工基本工資,按斬訓本工資升序排列,如果工資相同,按照eid升序排列
SELECT t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary
ON t_employee.eid = t_salary.eid
ORDER BY basic_salary,eid;
#查詢員工基本工資,按斬訓本工資降序排列,如果工資相同,按照eid排列
SELECT t_employee.eid,basic_salary FROM t_employee INNER JOIN t_salary
ON t_employee.eid = t_salary.eid
ORDER BY basic_salary DESC,eid;
limit 分頁
limit m,n
m表示從下標為m的記錄開始查詢,第一條記錄下標為0,n表示取出n條出來,如果從m開始不夠n條了,就有幾條取幾條,m=(page-1)*n,(page頁碼,n表示每頁顯示的條數)
如果第一頁limit 0,n
如果第二頁limit n,n
依次類推,得出公式limit (page-1)*n , n
#分頁
#查詢員工資訊,每頁顯示5條,第二頁
SELECT * FROM t_employee LIMIT 5,5;
#統計每個部門的平均基本工資,并顯示前三名
SELECT emp.dept_id,AVG(s.basic_salary)
FROM t_employee AS emp,t_salary AS s
WHERE emp.eid = s.eid
GROUP BY emp.dept_id
ORDER BY AVG(s.basic_salary) DESC
LIMIT 0,3;
where型子查詢
where型子查詢即把內層sql陳述句查詢的結果作為外層sql查詢的條件.
in 等于任何一個
all 和子查詢的所有值比較sal>ALL(1,2,3)等價于sal>1 && sal>2 && sal>3
any 和子查詢回傳的任意一個值比較,例如:sal>ANY(1,2,3)等價于sal>1 or sal>2 or sal>3
from型子查詢
from型子查詢即把內層sql陳述句查詢的結果作為臨時表供外層sql陳述句再次查詢.
`exit型子查詢`
#查詢部門資訊,該部門必須有員工
select * from t_department where exists (select * from t_employee where t_employee.dept_id=t.department.did)
六、事務
grant:授予訪問權限
revoke:撤銷訪問權限
commit:提交事務處理
rollback:事務處理回退
savepoint:設定保存點
lock:對資料庫的特定部分進行鎖定
事務的ACID特性:
-
原子性(Atomicity):原子意為最小的粒子,或者說不能再分的事物,資料庫事務的不可再分的原則即為原子性, 組成事務的所有SQL必須:要么全部執行,要么全部取消(就像上面的銀行例子),
-
一致性(Consistency):指資料的規則,在事務前/后應保持一致
-
隔離性(Isolation):簡單點說,某個事務的操作對其他事務不可見的.
-
持久性(Durability):當事務提交完成后,其影回應該保留下來,不能撤消
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/188328.html
標籤:MySQL
上一篇:mysql 基本常用的命令
下一篇:mysql 常用的操作(2)
