sql补充内容

视图

含义

一种虚拟表

语法

CREATE VIEW 视图名
AS
查询语句

将select结果封装到view里面

#查询姓名中包含a字符的员工名、部门名和工种信息
#创建虚拟表
create view myvl
as
select last_name,department_name,job_title
from employees e
join departments d 
on e.department_id=d.department_id
join jobs j
on j.job_id=e.job_id
#使用虚拟表
select * from myvl where last_name like '%a%'

目的

简化sql操作,保护数据

修改

方式一

CREATE OR REPLACE VIEW 视图名
AS
查询语句

方式二

ALTER VIEW 视图名
AS
查询语句

删除

drop view 视图名,视图名,...

查看

show create view 视图名

更新

#插入
INSERT INTO 视图名 VALUES(修改内容)#其实只要标记想要修改的部分即可
#修改
UPDATE 视图名 SET 赋值语句
#删除
DELETE FROM 视图名 WHERE 筛选条件

有些类型不可更新

  • 包含以下关键字:分组函数、distinct、group by、having、union
  • 常量查询
  • 包含子查询
  • 联合查询
  • 来自(from)一个无法更新的视图
  • where子查询引用了from子句的表

变量

系统变量:

系统提供的变量

  • 全局变量

    show global variables
    show global variables like '%char%'#特定变量
    select @@global.autocommit #查看autocommit的值
    set @@global.autocommit=0 #设置指定值

    全局变量设置后在各个连接中均有效,重启后失效

  • 会话变量
    针对于当前的会话

    show session variables #session可省略
    show session variables like '%char%'#特定变量
    select @@session.tx_isolation #查看tx_isolation的值
    set @@session.tx_isolation=0 #设置指定值

    只对当前会话有效
    自定义变量:

用户自用,三部分组成:声明、赋值、使用

  • 用户变量
    声明、初始化

    set @用户变量名=值
    set @用户变量名:=值
    select @用户变量名:=值

    赋值

    #1
    同样set、select
    #2
    select 字段 into @变量 from 表 #字段处为函数

    使用

    select @用户变量名 #查看
  • 局部变量
    只在定义其的begin end中有效,可以不用加@
    声明

    declare 变量名 类型 default 值 #此处值的类型与定义类型一致

    赋值

    set 变量名:= 值
    select @变量名 := 值
    #多变量同时赋值可以逗号隔开
    select 字段1,字段2 into 变量1,变量2
    from 表

    使用(同用户变量)

储存过程

一组预先编译好的sql语句(~批处理),包含创建与调用
创建

delimiter #告诉解释器什么时候结束(看到时候结束)
create procedure 过程名(参数列表) #多个以逗号隔开
begin
    存储体(即一组合法的sql语句)
end $

参数列表:包含参数模式、参数名、参数类型,空格隔开,模式有in、out、inout。in表示该参数可以作为输入(普通参数值),out表示输出(返回值)
储存体的语句结尾必须加;
调用

call 储存过程名(实参列表) $

举例

#根据女生姓名查询对应的男生信息
DELIMITER CREATE PROCEDURE myp(IN beautyName VARCHAR(20))
BEGIN
    SELECT bo.*
    FROM boys bo
    RIGHT JOIN beauty b ON bo.id=b.boyfriend_id
    WHERE b.name=beautyName; #必须加分号
END

CALL myp('柳岩') $
#简单的登录识别
delimiter $
create procedure login(in usname varchar(20),in passw varchar(20))
begin
    declare result int default 0;#用以辅助的局部变量

    select count(*) into result
    from admin
    where admin.username=usname
    and admin.password=passw;

    select if(result>0,'登录成功','登陆失败') 结果;
end call login('张三','12341234')

输出模式中可在存储过程外用额外定义的用户变量放入call中“装载”结果,此处略去实例

#输入值翻倍
CREATE PROCEDURE doubl3(INOUT a INT,INOUT b INT)
BEGIN
    SET a=a*2
    SET b=b*2
END $

删除

drop procedure 过程名#只能一个一个删除

存储过程也可以用来转换,例如转换日期
存储过程一般可以用于做批量插入、批量更新

函数

有且仅有一个返回结果的一组sql语句
如何创建?

create function 函数名(参数列表) returns 返回类型
begin
    函数体
end
  • 参数列表:参数名 参数类型
  • 函数体:包含return语句(return 值

调用

select 函数名(参数列表)

流程控制结构

分支结构

程序从两条或者多条路径中选择一条执行
if函数:

select if()

case结构:

case 变量 表达式 字段
when 判断1 then 返回1
when 判断2 then 返回2
when 判断3 then 返回3
...
else 返回值
end case

若是返回语句,注意加分号

select u.id,u.name,u.sex,
(case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
end) 性别 #只返回值,end case中case可省略
from users u;

if结构
应用在beginend中

if 条件1 then 语句1;
elseif 条件2 then 语句2
...
else 语句
end if
#分数判断
create function test_if(score int) returns char
begin
    if score>=90 and score<=100 then return 'A';#注意分号
    elseif score>=80 AND score<=90 THEN RETURN 'B';
    elseif score>=70 AND score<=80 THEN RETURN 'C';
    else return 'F';
    end if
end

循环结构

while\loop\repeat
while
先判断再执行

标签:while 循环条件 do
    循环体;
end while

loop
死循环

标签:loop
    循环体;
end loop

repeat
先执行后判断

标签:repeat
    循环体;
until 结束循环的条件
end repeat
#根据次数插入多条记录到admin表中
create procedure pro_while(IN insertCount INT)
begin
    declare i int default 1;
    while i<=insertCount do
        insert into admin(username,password)
        values('hhh'+i,'578')
        set i=i+1 #赋值
    end while;
end

call pro_while
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇