事务,视图 ,函数,存储过程,触发器
生活随笔
收集整理的這篇文章主要介紹了
事务,视图 ,函数,存储过程,触发器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1,?事務(wù):
一組操作, 要么都成功, 要么都失敗 特性:原子性: 一組操作, 要么都成功, 要么都失敗一致性(Consistency):指事務(wù)發(fā)生前和發(fā)生后,數(shù)據(jù)的總額依然匹配 隔離性(Isolation):簡單點(diǎn)說,某個事務(wù)的操作對其他事務(wù)不可見的 持久性(Durability):當(dāng)事務(wù)完成后,其影響應(yīng)該保留下來,不能撤消,只能通過“另開起一個事物”來抵消之前的錯誤關(guān)鍵字:begin,for update,commit
begin; # 開啟事務(wù)
select * from emp where id = 1 for update; # 查詢id值,for update添加行鎖;
update emp set salary=10000 where id = 1; # 完成更新
commit; # 提交事務(wù),此時鎖才結(jié)束 場景:思考:我去銀行給朋友匯款,我卡上有1000元,朋友卡上500元,我給朋友轉(zhuǎn)賬100元(無手續(xù)費(fèi)),如果,網(wǎng)線斷了, 我的錢剛扣,而朋友的錢又沒加時, 怎么辦?create table t11 (id int auto_increment primary key,name varchar(32) not null default '',money int not null default 0)engine=Innodb charset=utf8;insert into t11 (name,money) values ('zekai', 1000), ('eagon', 500); 解決方法:開啟事務(wù) (start transaction)(執(zhí)行sql操作)commit : 提交上面的SQL, 讓其生效rollback: 回滾show full tables; 顯示全部類型
?
2,視圖 :
產(chǎn)生的原因:
如果有一個SQL語句頻繁的會被使用到,比如說:select * from t4 where id>12 and id <24;搞一個映射,或者取一個別名select * from t4 where id>12 and id <24 === > v1
查看視圖:select * from v1; 創(chuàng)建視圖:create view v1 as select * from t4 where id>12 and id <24; 修改視圖:
alter view v1 as sql語句; 刪除視圖:
drop view v1; 問題:如果原生的表數(shù)據(jù)發(fā)生了變化, 那視圖會不會發(fā)生變化? 也會變化視圖中的數(shù)據(jù)會不會發(fā)生修改? 不會發(fā)生修改 應(yīng)用場景:MySQL: (DBA)生成視圖View程序:調(diào)用 select * from v1;
?
3,函數(shù):
不要輕易使用在程序中, 用代碼計算, 計算好了, 再傳給SQL語句執(zhí)行?
4,存儲過程 :?
將一大堆 SQL 語句進(jìn)行封裝, 類似于函數(shù), 結(jié)果就是存儲過程MySQL服務(wù)端:DBA (寫) a. 簡單的存儲過程:delimiter //create procedure p1()BEGINselect * from t11;END //delimiter ; # 結(jié)束之后記得再改回來,不然后面結(jié)束符就都是//程序:call p1(); b. 傳參數(shù): (in)delimiter //create procedure p2(in n1 int,in n2 int)BEGINselect * from t11 where id > n1;END //delimiter ;程序:call p2(12, 2) c. 傳入?yún)?shù): (out)delimiter //create procedure p3(in n1 int,out n2 int)BEGINselect * from t11 where id > n1;set n2 = 1;END //delimiter ;set @v2=123212;call p3(12, @v2);select @v2;
?
5 ,?觸發(fā)器? :
在滿足對某張表數(shù)據(jù)的增、刪、改的情況下,自動觸發(fā)的功能稱之為觸發(fā)器例如 : 向用戶表中添加一條數(shù)據(jù)的同時, 在日志表中也添加一條記錄delimiter //CREATE TRIGGER t1 BEFORE INSERT ON t7 FOR EACH ROWBEGINinsert into t11 (name, money) values ('xxx', 1234);END //delimiter ;
?
轉(zhuǎn)載于:https://www.cnblogs.com/HZLS/p/11046083.html
總結(jié)
以上是生活随笔為你收集整理的事务,视图 ,函数,存储过程,触发器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类型自动转换的问题
- 下一篇: gitlab远程提交