1. 程式人生 > >java學習之路——第四十五天

java學習之路——第四十五天

檢視:檢視是由查詢結果形成的一張虛擬表 ,並不是我們自行建立的表,而是將一個頻繁的查詢結果當成一張臨時表來用。

語法:create view as select 語句

為什麼要有檢視?

1、可以簡化查詢

2、可以進行許可權控制

         把表的許可權封閉,但是開發相應的檢視許可權,視圖裡只開放部分資料

3、大資料分表時可以用到

         拆表

 

檢視與表的關係:

         檢視是表的查詢結果,自然表的資料改變了,影響檢視的結果

 

檢視必須包含表中沒有預設值也不能為空的列

 

觸發器:trigger 一觸即發

作用:監視某種情況並觸發某種操作

四要素:監視地點   監視事件    觸發時間    觸發事件

語法:

create trigger 觸發器名

         觸發時間 觸發事件  on  監視地點

         for each  row(

固定寫法)

         begin

         表資料的操作語句,

         end;

因為sql語句預設是以;結尾,所以在使用觸發器的時候需要將結束符修改一下

修改結束符的語句:delimiter $ (設定$為結束符)

 

觸發事件:after  before

區別:after是先完成資料的增刪改再觸發,觸發的語句晚於監視的增刪改們無法影響前面的增刪改動作

before是先完成觸發,再增刪改,觸發的語句先於增刪改發生,我們有機會判斷,修改即將發生的操作。

 

案例:# 檢視

# 語法:create view 檢視名 as select 語句;

CREATE TABLE person(

  id INT PRIMARY KEY AUTO_INCREMENT,

  NAME CHAR(10),

  age INT

);

INSERT INTO person(NAME,age) VALUES('張三',12),('李四',13),('王五',23),('馬六',24);

 

CREATE VIEW view1 AS SELECT NAME FROM person;

 

-- 原表發生改變,檢視會不會發生改變

INSERT INTO person(NAME,age) VALUES ('xm',22);

 

-- 檢視發生改變 ,原表會不會發生改變

DELETE FROM view1 WHERE NAME='xm';

 

 

CREATE TABLE g(

   id INT,

   NAME VARCHAR(10),

   num INT

)CHARSET utf8;

 

CREATE TABLE o(

   oid INT,

   gid INT,

   much INT

)CHARSET utf8;

 

INSERT INTO g VALUES(1,'豬',22),

(2,'羊',19),(3,'狗',12),(4,'貓',8);

 

 

#1.新增訂單,庫存減少

 

-- 建立一個觸發器

DELIMITER $

CREATE TRIGGER tg1

AFTER INSERT ON o

FOR EACH ROW

BEGIN

UPDATE g SET num = num - new.much WHERE id=new.gid;

END$

 

-- 新增訂單

INSERT INTO o VALUES(2,3,3);

 

-- 刪除訂單庫存增加

DELIMITER $

CREATE TRIGGER tg2

AFTER DELETE ON o

FOR EACH ROW

BEGIN

UPDATE g SET num = num + old.much WHERE id=old.gid;

END$

 

DELETE FROM o WHERE oid=2;

 

-- 修改訂單的數量時,庫存相應改變

DELIMITER $

CREATE TRIGGER tg3

AFTER UPDATE ON o

FOR EACH ROW

BEGIN

UPDATE g SET num=num+old.much-new.much WHERE id=old.gid;

END$

 

UPDATE o SET much=1 WHERE oid=1;

 

-- 強制把訂單的商品數量改成5

DELIMITER $

CREATE TRIGGER tg4

BEFORE INSERT ON o

FOR EACH ROW

BEGIN

IF new.much>5 THEN

SET new.much=5;

END IF;

UPDATE g SET num=num-new.much WHERE id=new.gid;

END$

 

-- 新增訂單

INSERT INTO o VALUES(1,1,10);