视图
定义
视图只是一个语句规则
语法
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