首页 > 数据库 >sql复习

sql复习

时间:2023-10-10 18:22:25浏览次数:54  
标签:语句 存储 复习 -- 数据库 视图 --- sql

/*
数据库的基本业务认知
数据库软件的认知和客户端工具认知
数据库系统的认知
数据库软件安装和环境搭建
数据库常用的命令
数据库用户和权限
编码管理
数据库管理
表(权限,创建 字段名 类型 约束 表的修改 删除)

DML语句【最核心 最重要】--- 操控数据
insert update delete
select【难点重点】
投影查询
选择查询
连表查询

子查询

视图

MySQL数据库的应用技术---视图
什么是视图?
英文: view ---看见得东西
为什么需要视图?
存在问题:
复杂得查询语句:每一次使用都需要编写,执行,能不能只写一次,后面可以重复调用--需要共享
希望表中的一些字段分享的时候不被其他用户看见,只让其他用户获取我想让他看见的数据
可不可将查询语句进行封装,简化子查询操作

最终的目的就是希望保存sql语句,简化调用执行过程,掩藏数据
解决问题:
需要一个技术来实现功能,需要=一个有名字的空间存储想要做的事情
需要的时候调用
MySQL中提供了视图
视图的概述:
视图是一个存储数据库中虚表,视图表中没有数据,只有映射关系,真正的数据在视图关联的实际的表中
视图创建方法
create view 视图 as 查询语句
使用视图 和使用表是一样的

查看视图
desc 视图名字
select * from information_schema.VIEWS;
show create view 视图名字
删除视图
drop view 视图名
注意事项:
因为视图存在数据中的映射关系,也是占用存储空间,不能随意创建视图
视图关联的表可能被删除,出现视图还在,表不在
创建视图考虑复用性和使用性
主要的应用场景---【保护数据,选择性分享数据】





有一个小问题的出现:
原本:
数据库只负责数据存储 修改 获取 删除,数据的处理都交给了业务代码。
后来:
后来随着我们的业务越来越大,越来越复杂数据也越来越大
数据库获取数据传输到代码中处理,输出传速度以及代码业务处理压力
但数据库很闲--- 将业务处理转换一部分到数据

加入需求 转账 A-B 500
常规处理
一次select
俩车update

为了解决问题,要求数据库中可以编写业务---开发了一门语言--plsql(依赖数据库环境的语言)


plsql:
一门类似c的语法的完整地数据库端地编程语言【完整度--数据库大小】
探索---完整地plsql【Oracle 数据】

MySQL中plsql支持地比较晚,支持语法有所欠缺
MySQL中支持俩种方式编写业务脚本
存储过程
自定义函数
MySQL中不能做的
离开这俩个载体自由编写业务代码块

*/

/*
MySQL中的存储过程
解释:
存储类似函数的一种定义规范,或者封装代码规范
创建语法
create procedure 【if not exists】 存储名(【[in/out/inout] 参数名 参数类型...】)
定义信息
begin
存储过程需要业务内容
end
备注:
存储过程名:标识符的定语语法规范 要求--以pro_开头
参数:可以有0个或多个参数,是我们在调用存储过程的时候需要传入的数据,
参数前面可以加in/out/inout等标识,标识参数类型,
in---调用者传入的信息
out--用户存储过程执行过程需要返回给调用者的数据,存储
定义信息:编写注释信息
定义变量: 用户定义变量存储信息
存储过程业务:编写业务

*/

/*
创建一个简单的存储过程---获取员工和供应商信息
存储过程业务内容以begin 开头 以end结束
数据库中 每一句语句都以;结束
遇到;就以为结束

为了解决分号的问题--提供方式就是临时将结束符号改成其他符号
语法: delimiter 临时结束符号-- //或者$$

调用存储过程:
call 存储过程名字(实参列表);
删除存储过程
drop procedure【if exists】 存储过程名
*/

-- 修改结束符号
DELIMITER //

-- 创建
CREATE PROCEDURE pro_empandsup()
COMMENT '这是一个用户显示员工所有信息和供应商所有的信息的存储过程'
BEGIN
-- 查询所有的员工
SELECT * FROM _employeelist;

-- 查看所有的供应商
SELECT * FROM _vendors;

-- 当前用户
SELECT USER();
END//
DELIMITER ;
-- 结束符修改回来

-- 调用

CALL pro_empandsup();

-- 删除
DROP PROCEDURE pro_empandsup;

/*
1.关键字
系统提供的特殊含义的单词或者字母 例如 int varchar
2. 标识符

3.注释
-- 单行注释
/ * * / 多行注释


4.存储过程的变量定义
分类:
MySQL用户变量--全局变量
set @变量=初始值
使用 sql语句中直接用
局部变量
是定义存储过程和函数里面的变量,只有在begin和end之间有效
declare 变量名 变量类型(长度) 【default 默认值】,
解释:
变量名:标识符定义 为了区分,会以var_来头
变量类型:按照数据库的字段类型定义
默认值:就是变量初始化信息
赋值以及运算
变量名 :=表达式
变量名 =表达式
变量类型:
按照数据库中的字段类型
5.运算符
数据库运算符

变量运算
set 变量名=表达式

6.流程控制语句
条件判断:
if elsif else end if

语法
if 条件表达式 then
执行语句
else
执行语句
endif


if 条件表达式 then
执行语句

endif


if 条件表达式1:then
执行语句
elsif 条件表达式2 then
执行语句
else
执行语句
endif
选择
case when else end case

语法:
case【条件值】
when 条件then
执行语句
when 条件 then
else
执行语句
end case
循环语句
1.while
while 条件表达式 do
执行语句
end while;
2.loop
语法:
名字:loop
执行语句
leave ---结束loop
end loop;
3.repeat
语法:
repeat
执行语句
until 结束条件 end repeat
7.数组--游标
8.函数的存储过程

参数的传递
*/

标签:语句,存储,复习,--,数据库,视图,---,sql
From: https://www.cnblogs.com/1011-zslnb/p/17755401.html

相关文章

  • MySql事务以及隔离级别
    MySql事务什么是事务?即为一段代码块在执行过程中同时结束并不报错,要么同时成功,要么同时失败为什么需要事务?为了考虑数据的安全性,比如转账时,付款和收款要同时成功事务怎么使用?--声明事务starttransaction;sql1,sql2,.....commit;--提交事务--如果上述代......
  • MySQL基础命令
    一)基础命令1)对数据库的操作1.使用use库名;2.创建createdatabase库名;3.删除dropdatabase库名;4.显示数据库,表showdatabases;showtables;2)对数据表的操作1.创建表createtable表名(字段字段类型,idint,namevarchar(32));2.删除表droptable表名;3.修改表名altertable......
  • MySQL业务用户无法修改的会话级别参数
    对于MySQL的系统参数,有些参数只能在全局级别(global)修改,有些参数能在全局和会话(session)级别修改。对于能在会话级别修改的参数,应用用户也可以在当前会话中修改需要的参数来实现不同的业务需求。比如sql_mode参数,如果不同的应用可以根据不同的需求在各自的session中进行修改。此外,......
  • sql server 编写函数,去除小数点后多余的0
    sqlserver编写函数,去除小数点后多余的0要在SQLServer中编写一个函数来去除小数点后多余的零,你可以使用以下示例的方法:CREATEFUNCTIONdbo.RemoveTrailingZeros(@inputDECIMAL(18,6))RETURNSVARCHAR(255)ASBEGINDECLARE@resultVARCHAR(255);--将DE......
  • SQLServer报错: Got minus one from a read call
    用JDBC连接SqlServer数据库时,报这个错误。网上很多都说是数据库的连接已经满了。但我实际查询的时候,数据库连接数并没有满。 后来发现原因了,是代码存在疏忽。我把驱动类写成了Oracle的驱动类。所以这个错误实际上有一种可能是因为使用了错误的驱动类导致的。 ......
  • MySQL 低版本 解决row_number()over()无法使用的方法
    MySQL8以上版本支持了很多的窗口函数,但是低版本的可能也需要用到row_number()over()selecta.u_name,a.class,a.score,if((@class=null)or(@class=a.class),@rownum:=@rownum+1,@rownum:=1)rn,#没有并列情况if((@class=......
  • MySQL存储过程、递归调用
    MySQL存储过程、递归调用实现字典数据的预处理,维护类别表、数据表、tree表,数据库在jwzh_manager库1、先将excel导入到system_dict表,按表字段注释对应匹配。2、编写存储过程处理数据CREATEDEFINER=`root`@`%`PROCEDURE`handle_system_dict`()BEGIN #Routinebodygoesher......
  • Sqli-labs通关实况之第一关
    Sqli-labsless-1首先看题,提示你输入数字值的ID作为参数,我们输入?id=1,发现直接得到登录名和密码输入的数值不同,回显内容也不同,所以输入的内容是带入到数据库里面查询了接下来判断是字符型还是数字型我们可以在数值1后面加上一个单引号和双引号来判断,先加入单引号看看。可以......
  • 9月《中国数据库行业分析报告》已发布,47页干货带你详览 MySQL 崛起之路!
    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生态发展,目前已更至第十七期,并发布了共计1......
  • C#与SqlServer数据对照
    Decimal报错:Nostoretypewasspecifiedforthedecimalproperty'GridElectricityPurchase'onentitytype'ChargeDischarge'.Thiswillcausevaluestobesilentlytruncatediftheydonotfitinthedefaultprecisionandscale.Explicit......