1.1 為什么要使用數(shù)據(jù)庫?
1.持久化:將內(nèi)存中的數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中
方便管理數(shù)據(jù)
1.2 什么是數(shù)據(jù)庫
DB:數(shù)據(jù)庫保存了一系列有組織的數(shù)據(jù)
DBMS:數(shù)據(jù)管理系統(tǒng)
mysql 是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)
Mysql的邏輯架構(gòu)與存儲(chǔ)引擎
1.連接層
2.服務(wù)層
3.引擎層(最與眾不同)
4.存儲(chǔ)層
MySQL的數(shù)據(jù)類型
整型(xxxint)
位類型(bit)
浮點(diǎn)型(float和double、real)
定點(diǎn)數(shù)(decimal,numeric)
日期時(shí)間類型(date,time,datetime,year)
字符串(char,varchar,xxxtext)
二進(jìn)制數(shù)據(jù)(xxxBlob、xxbinary)
枚舉(enum)
特殊的NULL值
Null特征:
(1)所有的類型的值都可以是null,包括int、float等數(shù)據(jù)類型
(2)空字符串"",不等于null,0也不等于null,false也不等于null
(3)任何運(yùn)算符,判斷符碰到NULL,都得NULL
(4)NULL的判斷只能用is null,is not null
(5)NULL 影響查詢速度,一般避免使值為NULL
面試:
為什么建表時(shí),加not null default '' 或 default 0
答:不想讓表中出現(xiàn)null值.
為什么不想要的null的值
答:(1)不好比較,null是一種特殊值,比較時(shí),只能用專門的is null 和 is not null來比較.
碰到運(yùn)算符,一律返回null
(2)效率不高,影響提高索引效果.
因此,我們往往,在建表時(shí) not null default '' 或 default 0
SQL
sql :structure query language 結(jié)構(gòu)化查詢語言
sql分類:
DDL:數(shù)據(jù)定義語言, 關(guān)鍵字 create,drop alter
DML: 數(shù)據(jù)操作語言,用于添加,刪除,更新,查詢 insert,delete,update,select
DCL:數(shù)據(jù)控制語句 關(guān)鍵字 grant,revoke
約束:constraints
數(shù)據(jù)完整性是指數(shù)據(jù)的精確性 和可靠性
從4個(gè)方面考慮:實(shí)體完整性,域完整性,引用完整性,用戶自定義完整性
約束分為 主鍵約束,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
索引:索引是一個(gè)單獨(dú)的,物理的數(shù)據(jù)庫結(jié)構(gòu),索引是要消耗數(shù)據(jù)庫空間的,而約束是一種邏輯概念
索引好處:加快了查詢的速度
索引壞處:降低了增刪改的速度,增大了表的文件大?。ㄋ饕募踔量赡鼙葦?shù)據(jù)文件大)
mysql提供了多種 索引類型選擇:
1》普通索引
2》唯一性索引
3》主鍵索引
4》全文索引
自增列 auto_increment
關(guān)于自增長auto_increment:
(1)整數(shù)類型的字段才可以設(shè)置自增長。
(2)當(dāng)需要產(chǎn)生唯一標(biāo)識(shí)符或順序值時(shí),可設(shè)置自增長。
(3)一個(gè)表最多只能有一個(gè)自增長列
(4)自增長列必須非空
(5)自增長列必須是主鍵列或唯一鍵列。
(6)InnoDB表的自動(dòng)增長列可以手動(dòng)插入,但是插入的值如果是空或者0,則實(shí)際插入的將是自動(dòng)增長后的值。
DML操作
數(shù)據(jù)操縱語言(DML)DML用于插入、修改、刪除數(shù)據(jù)記錄,包括如下SQL語句:
INSERT:添加數(shù)據(jù)到數(shù)據(jù)庫中
UPDATE:修改數(shù)據(jù)庫中的數(shù)據(jù)
DELETE:刪除數(shù)據(jù)庫中的數(shù)據(jù)
去重DISTINCT(distinct)
select distinct dept_id from t_employe;
笛卡爾積
定義:將兩個(gè)(或多個(gè))表的所有行進(jìn)行組合,連接后的行數(shù)為兩個(gè)表的乘積數(shù)
在MySQL中如下情況會(huì)出現(xiàn)笛卡爾積,主要是因?yàn)槿鄙訇P(guān)聯(lián)條件或者關(guān)聯(lián)條件不準(zhǔn)確
關(guān)聯(lián)條件
表鏈接的約束條件有三種方式:where,on,using
where: 適用于所有關(guān)聯(lián)查詢
ON:只能和JOIN一起使用,只能寫關(guān)聯(lián)條件。雖然關(guān)聯(lián)條件可以并到WHERE中和其他條件一起寫,但分開寫可讀性更好。
USING:只能和JOIN一起使用,而且要求兩個(gè)關(guān)聯(lián)字段在關(guān)聯(lián)表中名稱一致,而且只能表示關(guān)聯(lián)字段值相等
當(dāng)table1和table2本質(zhì)上是同一張表,只是用取別名的方式虛擬成兩張表以代表不同的意義。然后兩個(gè)表再進(jìn)行內(nèi)連接,外連接等查詢
select的5個(gè)句子
where條件查詢
group by 分組查詢
聚合函數(shù) avg,count,min,max,sum
having篩選
having與where不同點(diǎn)
where針對(duì)表中的列發(fā)揮作用,查詢數(shù)據(jù),having針對(duì)查詢結(jié)果中的列的發(fā)揮作用
where后面不能寫分組函數(shù),而 having后面可以使用分組函數(shù)
having只用于group by 分組統(tǒng)計(jì)語句
order by 排序
按一個(gè)或多個(gè)字段對(duì)查詢結(jié)果進(jìn)行查詢
#查詢員工基本工資,按照基本工資升序排列,如果工資相同,按照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表示從下標(biāo)為m的記錄開始查詢,第一條記錄下標(biāo)為0,n表示取出n條出來,如果從m開始不夠n條了,就有幾條取幾條。m=(page-1)*n,(page頁碼,n表示每頁顯示的條數(shù))
如果第一頁limit 0,n
如果第二頁limit n,n
依次類推,得出公式limit (page-1)*n , n
#分頁
#查詢員工信息,每頁顯示5條,第二頁
SELECT * FROM t_employee LIMIT 5,5;
#統(tǒng)計(jì)每個(gè)部門的平均基本工資,并顯示前三名
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型子查詢即把內(nèi)層sql語句查詢的結(jié)果作為外層sql查詢的條件.
in 等于任何一個(gè)
all 和子查詢的所有值比較sal>ALL(1,2,3)等價(jià)于sal>1 && sal>2 && sal>3
any 和子查詢返回的任意一個(gè)值比較。例如:sal>ANY(1,2,3)等價(jià)于sal>1 or sal>2 or sal>3
from型子查詢
from型子查詢即把內(nèi)層sql語句查詢的結(jié)果作為臨時(shí)表供外層sql語句再次查詢.
`exit型子查詢`
#查詢部門信息,該部門必須有員工
select * from t_department where exists (select * from t_employee where t_employee.dept_id=t.department.did)
六、事務(wù)
grant:授予訪問權(quán)限
revoke:撤銷訪問權(quán)限
commit:提交事務(wù)處理
rollback:事務(wù)處理回退
savepoint:設(shè)置保存點(diǎn)
lock:對(duì)數(shù)據(jù)庫的特定部分進(jìn)行鎖定
事務(wù)的ACID特性:
原子性(Atomicity):原子意為最小的粒子,或者說不能再分的事物。數(shù)據(jù)庫事務(wù)的不可再分的原則即為原子性。 組成事務(wù)的所有SQL必須:要么全部執(zhí)行,要么全部取消(就像上面的銀行例子)。
一致性(Consistency):指數(shù)據(jù)的規(guī)則,在事務(wù)前/后應(yīng)保持一致
隔離性(Isolation):簡(jiǎn)單點(diǎn)說,某個(gè)事務(wù)的操作對(duì)其他事務(wù)不可見的.
持久性(Durability):當(dāng)事務(wù)提交完成后,其影響應(yīng)該保留下來,不能撤消
聯(lián)系客服