MySQL個(gè)人理解學(xué)習(xí)筆記cmd連接,子查詢,limit,視圖,觸發(fā)器,儲(chǔ)存過程【詩書畫唱】
個(gè)人總結(jié)的創(chuàng)建觸發(fā)器的語法理解翻譯:
create?trigger(創(chuàng)建一個(gè)觸發(fā)器)??s1(觸發(fā)器名)
after?insert?on?dingdan(在(訂單)表添加數(shù)據(jù)的時(shí)候觸發(fā)觸發(fā)器)
for?each?row(第三句固定的不用管,個(gè)人理解翻譯:遍歷每一行)
begin(開始位置)
update?shangpin?set?sp_num=sp_num-new.sp_buynum?where?sp_id=new.sp_id;(觸發(fā)的事件是減少商品表3瓶果粒橙,SQL語句)
end;(結(jié)束)
觸發(fā)器例子題目和答案:
創(chuàng)建觸發(fā)器,功能為:當(dāng)執(zhí)行“用戶張三買了果粒橙3瓶添加訂單”的SQL語句時(shí),相應(yīng)的商品的數(shù)量減少3瓶。
create?trigger?s1
after?insert?on?dingdan
for?each?row
begin
update?shangpin?set?sp_num=sp_num-new.sp_buynum?where?sp_id=new.sp_id;
end;
drop?trigger?s1
個(gè)人的總結(jié):
一些儲(chǔ)存過程中寫的沒有傳的參數(shù)等的方法函數(shù),用call來調(diào)用無參的方法時(shí),可以“儲(chǔ)存過程的方法名()”或“儲(chǔ)存過程的方法名”。

cmd中啟動(dòng)MySQL
net start mysql
(命令開啟MySQL)
登錄MySQL
mysql -uroot -proot
查看數(shù)據(jù)庫
show databases;
數(shù)據(jù)庫:
按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)管理數(shù)據(jù)的倉庫
為什么要使用數(shù)據(jù)庫?
1.查找數(shù)據(jù)方便
2.節(jié)省空間
卸載mysql沒有卸載完成
1.控制面板卸載mysql服務(wù)
2.文件保存目錄刪掉
3.隱藏mysql目錄也要?jiǎng)h
MySQL的數(shù)據(jù)類型:
int:整形?
varchar():字符串
boolean:是否
text:大文本
timestamp:時(shí)間戳
bolb:二進(jìn)制
mysql約束: ?
唯一:unique??
自增約束:auto_increments??
主外鍵:foreign key?
外鍵也稱為參照完整性,外鍵表的信息參照著主鍵表的信息進(jìn)行設(shè)置,主鍵表沒有的信息外鍵
(個(gè)人的理解:選好主表很重要,一般列名多的表為主表)
表示不能使用的非空約束:not null??
主鍵約束:primary key
默認(rèn)值約束:default
? on delete cascade:在設(shè)置外鍵的時(shí)候,設(shè)置級(jí)聯(lián)刪除
MySQL增刪改查語法:
增加數(shù)據(jù):insert into 表名(列名1,列名2) values(值1,值2)
修改語法:update 表名 set 列名1=值1 where 條件表達(dá)式
刪除語法:delete from 表名 條件表達(dá)式
刪除表:drop table 表名
清空表:truncate table sss
基本查詢:select * from 表名
查詢指定的內(nèi)容:select 列名 from 表名
列名起別名:select 列名 as 名稱 from 表名
?select 列名? ? 名稱 from 表名
去除重復(fù):select distinct name,typename from sss
簡單多表查詢:select * from 表1,表2 where 表1.id=表2.id
子查詢分為3種“子句”:?
where后當(dāng)條件
將查詢結(jié)果當(dāng)做比較條件
select * from? 表名 where 列名>(select 列名 from 表名)
from后當(dāng)數(shù)據(jù)源
exists后當(dāng)條件
where子句:后跟一個(gè)表達(dá)式,表達(dá)式返回一個(gè)true或者false的數(shù)據(jù)
表達(dá)式可以是:
>,<,=,!=,>=,<=
between...and....
in(內(nèi)容1,內(nèi)容2)
like:%(匹配0到任意個(gè)字符數(shù)據(jù))? ? _(代表一個(gè)字符)
&&,||,and,or,is not null,is null?
order by:
排序....默認(rèn)是升序(ASC) 倒序(DESC)
select top 3 from sp
limit后可以跟1個(gè)或者兩個(gè)數(shù)字,
跟1個(gè)數(shù)字的時(shí)候是從0到第幾條數(shù)據(jù)。
跟兩個(gè)的時(shí)候就是從第一個(gè)參數(shù)開始的位置查詢第二個(gè)參數(shù)的個(gè)數(shù)。
個(gè)人的理解:
SQL語句結(jié)尾加limit?1,表示取第1條數(shù)據(jù).

SQL語句結(jié)尾加limit1,6表示取第1條到數(shù)據(jù)到第6條數(shù)據(jù)。

分組:
group..by..:按照某種特征將其分為一組,分組一定要和聚合函數(shù)
一起使用,否則分組沒有意義
having:過濾條件,在進(jìn)行分組后進(jìn)行條件過濾
視圖:視圖是由查詢結(jié)果定義的一張?zhí)摂M表
視圖的作用:
1.使用視圖可以簡化查詢
2.可以進(jìn)行權(quán)限控制
3.大數(shù)據(jù)分表時(shí)可以使用
創(chuàng)建視圖的語法:
create view 視圖名 as sql 語句
對于視圖的修改:
修改表的源數(shù)據(jù)是可以改變視圖的內(nèi)容的,但是修改視圖的內(nèi)容不一定會(huì)。
影響表的源數(shù)據(jù),如果視圖是多個(gè)列計(jì)算的結(jié)果的時(shí)候是不會(huì)影響的,只有視圖的
結(jié)果是指定源數(shù)據(jù)是那一列才會(huì)該表源數(shù)據(jù)的內(nèi)容。
觸發(fā)器的概念:
觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對象,在滿足定義條件時(shí)觸發(fā),
并執(zhí)行觸發(fā)器中定義的語句集合。
一般是在進(jìn)行增刪改表的時(shí)候觸發(fā)。
觸發(fā)器語法:
create? ?trigger? 觸發(fā)器名稱
after insert/update/delete? on? 那張表添加觸發(fā)器
for each row? ? //固定死的不用管
begin //開始
觸發(fā)的sql語句事件;
end;
存儲(chǔ)過程:
1.可以完成比較復(fù)雜的運(yùn)算
2.SQL編程的代碼可重復(fù)使用
3.執(zhí)行的速度相對快一些
? (每次寫的sql語句數(shù)據(jù)庫會(huì)將其編譯成函數(shù),
存儲(chǔ)過程數(shù)據(jù)庫只會(huì)編譯一次之后下次用的時(shí)候就不會(huì)再編譯了)?
存儲(chǔ)過程語法:
create procedure 存儲(chǔ)過程名字(先寫參數(shù),后寫類型)
begin
做存儲(chǔ)過程的sql語句
if(條件表達(dá)式)then
內(nèi)容1
else
內(nèi)容2
end if(可變可無等的部分)
end;