1. 視圖 創建視圖 create view 視圖名字 as 查詢sql語句; drop view 視圖名字; alter view 視圖名字 as 查詢sql語句; 2. 觸發器 1. 插入事件觸發器 INSERT INTO order_table(gid,much) VALUES(1,3); - ...
1. 視圖
創建視圖
create view 視圖名字 as 查詢sql語句;
drop view 視圖名字;
alter view 視圖名字 as 查詢sql語句;
2. 觸發器
1. 插入事件觸發器
INSERT INTO order_table(gid,much) VALUES(1,3);
-- update goods set num = num -3 where id =1;
CREATE TRIGGER tg1 AFTER INSERT on order_table
for EACH row -- 固定寫法
BEGIN
update goods set num = num -new.much where id =new.gid;
END
-- 刪除觸發器
drop TRIGGER TG1;
2.更新事件觸發器
update order_table set much = much +2 where oid = 6;
update goods set num = num+2 where id = 1;
create TRIGGER tg2 AFTER UPDATE ON order_table
for EACH ROW
BEGIN
update goods set num = num+old.much - new.much where id = old.gid;
END
3.刪除事件觸發器
DELETE FROM order_table where oid =6;
update goods set num = num + 3 where id = 1;
create TRIGGER tg3 AFTER DELETE on order_table
for EACH ROW
BEGIN
update goods set num = num + old.much where id = old.gid;
END
4.查看觸發器
show tiggers;
3.存儲過程
1.封裝
-- CREATE PROCEDURE p1()
-- BEGIN
-- INSERT into goods VALUES (null,'韓涉',50);
-- select * from goods;
-- END
--
call p1();
2.參數
-- in out inout
CREATE PROCEDURE p3(in i int,inout names varchar(50))
BEGIN
update goods set name = names where id = i;
END
set @names = '大鵝';
call p2(4,@names);
select @names;
into 使用
set @i = 0;
set @n = '';
select num into @i from goods where id = 1;
select @i;
3.判斷
CREATE PROCEDURE p3(in flag char(5), in nums int)
BEGIN
if flag = 'true' then
SELECT * from goods where num < nums;
ELSEIF flag ='false' THEN
SELECT * FROM goods where num > nums;
ELSE
SELECT * FROM goods;
END if;
END
call p3('false',20);
4.迴圈
-- 做 1-100 累加的和
create PROCEDURE p4(in n int,out he int)
BEGIN
declare i int DEFAULT 0;
DECLARE sum int;
set sum = 0;
while i <= n DO
set sum = sum +i;
set i = i + 1;
end WHILE;
set he = sum;
end
set @he = 0;
call p4(100,@he);
select @he;
查看存儲過程
show PROCEDURE status;
刪除存儲過程
drop PROCEDURE p1;
4.函數
create FUNCTION f1(x int,y int)
RETURNS INT
BEGIN
declare sum int DEFAULT 0;
set sum = x +y;
RETURN(sum);
END
select f1(100,2);
select g.*,f1(100,num) FROM goods g;
DROP FUNCTION f1;
5.事物
什麼是事物
一組sql語句批量執行,要麼全部執行成功,要麼全部執行失敗
事物的四個特點:
原子性:對於其數據修改,要麼全都執行,要麼全都不執行。
一致性:資料庫原來有什麼樣的約束,事務執行之後還需要存在這樣的約束,所有規則都必須應用於事務的修改,以保持所有數據的完整性。
隔離性:一個事務不能知道另外一個事務的執行情況(中間狀態).所以同一個數據在有多個事物訪問時,其中一個得到數據訪問修改,其他的事物處於阻塞狀態,直到數據被釋放,輪到下一個使用。
持久性:即使出現致命的系統故障也將一直保持。不要告訴我系統說commit(提交)成功了,回頭電話告訴我,伺服器機房斷電了,我的事務涉及到的數據修改可能沒有進入資料庫。
start TRANSACTION; -- 開啟事物,關閉mysql自己的自動提交方式
SAVEPOINT sa1;
update account set money = money -1000 where id = 4;
SAVEPOINT sa1;
update account set money = money +1000 where id = 3;
-- COMMIT; -- 提交當前事物
select * from account;
ROLLBACK to sa1;-- 回滾當前事物
6.鎖
當併發事務同時訪問一個資源時,有可能導致數據不一致,因此需要一種機制來將數據訪問順序化,以保證資料庫數據的一致性。
7.資料庫的備份
備份:
mysqldump -uroot -p123456 資料庫名 表 > 保存位置.
導入:
mysql> USE 資料庫名;
mysql> source 備份文件.sql;