視圖
定義
視圖只是一個語句規則
語法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
作用
(1) 可以簡化查詢
(2) 可以進行權限控制
視圖與表關係
視圖是表的查詢結果, 自然表的數據變了, 影響視圖結果
(1) 視圖的數據與表的數據一一對應時, 可以修改[由計算而來的數據不可更改]
(2) 視圖增刪改也會影響到表, 但是視圖並不總是能增刪改
(3) 對於視圖insert還應注意, 視圖中必須包含表中沒有默認值得列
注意: 一般來說, 視圖只是用來查詢的, 不應該執行增刪改操作
SQL編程
1. 變量聲明
(1)會話變量
定義形式:
set @變量名 = 值;
示例:
set @long =555;
SELECT @long;
(2)普通變量
定義形式:
declare 變量名 類型 [default 默認值]
說明:
1.他必須先聲明(即定義),此時也可以賦值;
2.賦值跟會話變量一樣: set 變量名 = 值;
3.他只能在編程環境中使用!!!
說明: 什麼是編程環境?
存儲過程, 函數, 觸發器
(3)變量的賦值形式
語法1:
set 變量名 = 表達式; #此語法中變量必須先使用declare聲明
語法2:
set @變量名 = 表達式; #此語法無需使用declare聲明, 而是直接賦值
語法3:
select @變量名 := 表達式; #此語句會給該變量賦值, 同時還會最爲一個select語句輸出 '結果集'
示例: SELECT @age := 12;
語法4:
select 表達式 into @變量名; #此語句雖然看起來是select語句, 但其實比不輸出 '結果集', 而是給變量賦值
示例: SELECT 33 + 33 INTO @age; SELECT @age;
2. 運算符
(1)算術運算符
+ - * / %
注意: MySQL沒有++和--運算符
(2)關係運算符
> >= < <= =(等於)<>(不等於) !=(不等於)
(3)邏輯運算符
and(與) or(或)not(非)
3. 語句塊包含符
所謂的語句塊包含符, 在js中, 以及絕大部分的其他語言中, 都是大括號: {}
他用在很多場合: if, switch, for, function
而MySQL編程中的語句塊包含符如下:
4. if判斷
MySQL支持兩種判斷, 第一個是 if 判斷, 第二個是 case 判斷
if 語法
單分支
if 條件 then
//代碼
end if;
雙分支
if 條件 then
//代碼1
else
//代碼2
end if;
多分支
if 條件 then
//代碼1
elseif 條件 then
//代碼2
else
//代碼3
end if;
案例: 接收4個數字, 如果輸入1則輸出春天 2=>夏天 3=>秋天 4=>冬天 其它數字=>出錯
我們使用存儲過程來體驗 if 語句用法
create procedure 存儲過程名(參數, 參數, ...)
begin
//代碼
end
注意: 通常情況下, ";" 表示SQL語句結束, 同時向服務器提交併執行. 但是存儲過程中有很多SQL語句, 每一句都要以分號隔開, 這時候我們就需要使用其他符合來代替向服務器提交的命令. 通過delimiter命令改變語句結束符
語法: delimiter 符號 示例: delimiter $
CREATE PROCEDURE p1 (n INT)
BEGIN
IF n = 1 THEN
SELECT '春天' AS '季節';
ELSEIF n = 2 THEN
SELECT '夏天' AS '季節';
ELSEIF n = 3 THEN
SELECT '秋天' AS '季節';
ELSEIF n = 4 THEN
SELECT '冬天' AS '季節';
ELSE
SELECT '出錯' AS '季節';
END IF;
END;
調用 語法: call 存儲過程的名稱(參數)
CALL p1(3);
5. case判斷
case 變量
when值 then 語句;
when值 then 語句;
else 語句;
end case;
案例同 if
CREATE PROCEDURE p2(n INT)
BEGIN
CASE n
WHEN 1 THEN SELECT '春天' AS '季節';
WHEN 2 THEN SELECT '夏天' AS '季節';
WHEN 3 THEN SELECT '秋天' AS '季節';
WHEN 4 THEN SELECT '冬天' AS '季節';
ELSE SELECT '出錯' AS '季節';
END CASE;
END
6. 循環
MySQL支持的循環有loop, while, repeat 循環
(1) loop 循環
標籤名: loop
leave 標籤名 --退出循環
end loop;
(2) while 循環
[標籤: ]while 條件 do
//代碼
end while;
(3) repeat 循環
repeat
//代碼
until 條件 end repeat;
案例 使用 loop 循環, 完成計算1到n的和;
CREATE PROCEDURE p3 (n INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;
aa:LOOP
IF i>n THEN
LEAVE aa;
END IF;
SET s=s+i;
SET i=i+1;
END LOOP;
SELECT s;
END
案例 使用 while 循環, 完成計算1到n的和;
CREATE PROCEDURE p4 (n INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;
WHILE i<=n DO
SET s=s+i;
SET i=i+1;
END WHILE;
SELECT s;
END
案例 使用 repeat 循環, 完成計算1到n的和;
CREATE PROCEDURE p5 (n INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE s INT DEFAULT 0;
REPEAT
SET s=s+i;
SET i=i+1;
UNTIL i>n END REPEAT;
SELECT s;
END