您的位置:首页 > 汽车 > 新车 > 源码论坛有哪些_网络信息安全工程师_网络营销的常用工具_南京网站推广公司

源码论坛有哪些_网络信息安全工程师_网络营销的常用工具_南京网站推广公司

2024/11/17 14:36:20 来源:https://blog.csdn.net/m0_62024160/article/details/142625907  浏览:    关键词:源码论坛有哪些_网络信息安全工程师_网络营销的常用工具_南京网站推广公司
源码论坛有哪些_网络信息安全工程师_网络营销的常用工具_南京网站推广公司

文章目录

  • 一、视图(view)
    • 1. 作用
    • 2. CRUD--跟表操作几乎相同
      • ① 创建
      • ② 显示视图
      • ③ 查看视图相关详细信息
      • ④ 删除视图
      • ⑤ 更新视图
    • 3. 视图算法
      • ① 创建视图时指定视图算法
      • ② 后期navicat里修改视图算法
      • ③ 注
  • 二、事务(transaction)
    • 1. 事务的提出
    • 2. 举例理解
      • ① commit -- 一起执行
      • ② rollback -- 一起回滚
      • ③ rollback to -- 回滚点
      • ④ 注意
    • 3. ACID -- 事务的四大特性
    • 4. 注意:使用条件
  • 三、索引(index)
    • 1. 概念
    • 2. 优缺点
    • 3. CRUD
      • ① 创建索引
      • ② 更新索引
      • ③ 删除索引
      • ④ 查看
  • 四、存储过程
    • 1. 用途
    • 2. delimiter
    • 3. 举例理解
      • ① 设计存储过程
      • ② 查看存储过程
      • ③ 显示数据库里所有的存储过程
      • ④ 删除存储过程
  • 五、函数
    • 1. number
      • ① 生成一个随机数
      • ② 数据库里抽奖
      • ③ 向上取整
      • ④ 四舍五入
      • ⑤ 向下取整
      • ⑥ 截取数字
      • ⑦ 随机排序
    • 2. string
      • ① 全转换成大写
      • ② 全转换成小写
      • ③ 截取字符串
      • ④ 拼接字符串
        • concat另一个用法
    • 3. 其它函数
      • ① 获取当前时间
      • ② 获取当前时间戳
      • ③ 以年月日形式呈现当前时间
      • ④ 加密函数
      • ⑤ select 配合 if函数 使用
  • 六、内容出处

一、视图(view)

1. 作用

① 视图相当于一个虚拟的表,作用在于筛选,防止无关业务人员看到敏感数据。
② 视图也是在有意地隐藏表结构,说白了还是在隐藏敏感数据。
③ 从某种意义上来说它降低了sql的复杂度,有助于实现快速查询

2. CRUD–跟表操作几乎相同

① 创建

create view 视图名 as select 字段名,字段名 from 表名
例如:
① (普通创建)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        由此可见,vw_stu这个视图就刻意隐藏了学生性别、年龄等信息,班长拿到的可能就是这个视图里的信息(不含身份证号、详细家庭住址等敏感信息),保护学生隐私
        之后查找某个同学的电话时就不需要再写一遍sql语句了,直接在vw_stu这个视图里检索就可以了
② (加入多表查询的内容)
在这里插入图片描述

在这里插入图片描述

② 显示视图

① 在navicat里查看
② 终端用命令查看:show tables;

在这里插入图片描述
        视图名前面应该加一个vw_前缀,从而和普通表进行区分

③ 查看视图相关详细信息

在这里插入图片描述
在这里插入图片描述
显示当前数据库中所有视图的配置信息:
show table status where comment = ‘view’ \G在这里插入图片描述
在这里插入图片描述

④ 删除视图

drop view 视图名;
在这里插入图片描述
在这里插入图片描述

⑤ 更新视图

alter view 视图名 as select 字段名, 字段名 from 表名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
alter view vw_stu_2 drop 字段名;这种写法会报错

3. 视图算法

① merge:合并算法
② temptable:临时表算法

① 创建视图时指定视图算法

create algorithm= view 视图名 as select 字段名,字段名 from 表名;
在这里插入图片描述
在这里插入图片描述

② 后期navicat里修改视图算法

在这里插入图片描述
在这里插入图片描述

③ 注

        网课里提到将子查询语句运用到视图里时,如果发现结果跟预期的不一样,这个跟视图算法有关,将其调整为temptable即可。
        但是下述语句,我在navicat里依次将视图算法调整为undefined、merge、temptable,发现总能运行出正确结果。gpt说这是因为视图算法影响的是查询的执行方式,但不一定会导致语义上的错误。即使视图算法不是temptable,查询优化器仍然能够根据上下文正确解析和执行我们的sql语句。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、事务(transaction)

1. 事务的提出

        淘宝购物时,我们点击立即购买,但是还没付款。此时还没付款的钱在哪里,难道直接更新到了阿里的账户?我们点击付款以后钱去了哪里?点击确认收货之后钱又在哪里,难道我们付完款以后钱就直接到了商家的账户?
        进行转账操作时,我们输入完金额等所有信息以后,会让我们再次确认是否真的要把这些钱转过去,点击确认之后才会真正把钱转给对方。那么点击确认之前的钱在哪?
        可以想一下,难道只是下了个订单就要让我们账户的数据减少,阿里的账户数据增加?那万一过几天我们反悔了呢,难道还要再让阿里的账户数据减少,我们账户的数据增加么?那要是每个人都下一单但是不付款,过几天再退了,服务器不就炸了么?
        因此总要有一个确定性的东西,执行完这个步骤以后再更新数据,我们把这个东西叫作事务。例如:点击确认转账之后,才会真的把钱转过去;点击确认收货之后,钱才会到达商家账户。由此保证了数据的安全性和一致性。事务这个东西要么干脆一块执行,要么回滚
        mysql中最重要的东西,跟钱有关。涉及到钱这种比较严谨的东西的话,一般都会用到事务。

2. 举例理解

情境:接下来会有一个转账的操作(转账跟钱有关,所以一般都比较严谨),一定会有一个确定的操作 – 是否真的要执行转账操作(事务要么一起执行,要么一起回滚掉)
在这里插入图片描述
在这里插入图片描述

① commit – 一起执行

在这里插入图片描述
此时去navicat里刷新一下,发现数据都没变
在这里插入图片描述
此时再刷新,发现钱已经从1号的账户转到了2号的账户

② rollback – 一起回滚

        在公司里遇到跟钱有关的转账操作,一般都会用事务,从而保证资金的准确性。万一哪天服务器崩了,数据到人家账户上了,卖家发货了,但是对面不承认,此时就可以rollback。在这里插入图片描述
navicat里刷新一下,发现数据都没变

③ rollback to – 回滚点

        回滚点就类似于git或者虚拟机里的快照
在这里插入图片描述
在这里插入图片描述
刷新一下可以发现只有四条数据

④ 注意

        只要commit,就不能再rollback。例如:淘宝买东西,我都确认收货了,钱也已经到卖家账户了,此时就不能再反悔让人家退钱了。

3. ACID – 事务的四大特性

① atomicity 原子性:说白了就是不能再分了。事务是一个整体,要么一起执行,要么一起不执行
② consistency 一致性:一旦commit或者rollback,数据库里的数据也要随之改变。事务已经结束,数据也必须达到相应的完整状态
③ isolation 隔离性:每个事务都是相互隔离的,不能说1号和2号进行交易,结果3、4号的数据也被更改了
④ durability 持久性:事务一旦commit,就不可能再更改了,相当于在数据库中永久地写存

4. 注意:使用条件

        在mysql中,只有当建表时把数据库引擎指定为InnoDB,才能使用事务。虽然事务是一个通用的数据库特性,但是在mysql中,其它引擎(例如:MyISAM)不支持事务。

三、索引(index)

1. 概念

mysql中索引的概念以及分类 该文缺点:混淆了唯一键约束和唯一索引的sql语句

① 搜索引擎会用到全文索引。mysql不支持中文索引(解决方案:使用sphinx),但是不知道现在支不支持(dba知道)

2. 优缺点

优点:查询速度快(例如新华字典前面的索引,按拼音、按笔画可以快速找到某个字)
缺点:① 会极大地降低CRUD的效率 ② 占空间

① 有些公司会强制要求将哪些东西设置成索引、哪些东西不能设置成索引
为什么要创建索引?
答:该数据被频繁地搜索(例如:高考总分设置一个普通索引),创建索引可以提高查询效率
③ 一般情况下都是创建一个索引
④ 有时会给公共字段创建索引
注意:如果该表内数据非常少,就没必要创建索引(例如:给性别创建索引就没必要)

3. CRUD

① 创建索引

创建普通索引:create index 索引名 on 表名(字段名);
创建唯一索引:create unique index 索引名 on 表名(字段名);
创建全文索引:create fulltext index 索引名 on 表名(字段名);
创建主键索引:alter table 表名 add primary key(字段名);
注:
① 创建主键约束时会自动创建主键索引,创建唯一键约束时会自动创建唯一索引
② 主键索引只能通过主键约束创建,但是普通索引和唯一索引可以单独创建
③ 设置唯一索引,使用删除唯一键的sql语句后,发现唯一索引随之被删除了
在这里插入图片描述
在这里插入图片描述
设置唯一键约束,使用删除唯一索引的sql语句后,发现唯一键随之被删除了
在这里插入图片描述
在这里插入图片描述
为某张表同一个字段设置唯一索引和设置唯一键约束。这样一来就算删除唯一键约束,也不会对唯一索引产生影响。(唯一键约束和唯一索引的设置顺序以及删除顺序互不影响)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

② 更新索引

alter table 表名 add (unique / fulltext) index 索引名(字段名);
其实相当于新创一个索引,跟 ① 中create语句效果相同
② 主键索引用更新主键约束的sql语句

③ 删除索引

① 普通、全文、唯一索引都这样删:drop index 索引名 on 表名;
② 主键索引用删除主键约束的sql语句

④ 查看

        索引的目的主要是提高查询效率。创建索引后,可以通过select语句利用索引进行检索。通常数据库会自动使用检索来优化查询。
在这里插入图片描述
在这里插入图片描述
        我们可以发现用唯一索引和不用唯一索引查出来数据的顺序不同。
在这里插入图片描述
在这里插入图片描述
        但是对这张表而言,用不用没啥差别,不知道为什么

四、存储过程

1. 用途

        dba用于模块化设计的一个东西,支持CRUD、事务等各种操作,相当于sql里的一个函数

2. delimiter

        mysql中默认以分号作为语句的结尾,例如:show databases; + 回车 就会执行这条语句。但是存储过程里会有很多sql,每次写个分号就直接把命令发送到服务器,那肯定不行啊。因此mysql出了一个delimiter,delimieter //语句执行之后,mysql下面的语句就不以分号结尾了,而是以 // 作为结尾。
在这里插入图片描述
在这里插入图片描述

3. 举例理解

① 设计存储过程

情境:双11了,给每个用户都发一个红包,然后把所有用户的昵称都改成tom。这个操作用视图肯定不行(视图只能查),明显就是存储过程。双11之前,dba先把这个存储过程给写了,到指定时间后,一条命令调用存储过程,然后它就会默认执行之前设计过的所有sql,不需要再一点一点去写了,类似于函数调用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

② 查看存储过程

show create procedure 存储过程名;在这里插入图片描述

③ 显示数据库里所有的存储过程

show procedure status \G
在这里插入图片描述

④ 删除存储过程

drop procedure 存储过程名;
在这里插入图片描述

五、函数

1. number

① 生成一个随机数

select rand();
在这里插入图片描述

② 数据库里抽奖

select * from 表名 order by rand() limit 抽几个人;
在这里插入图片描述
程序员做开发后端时,如果能从数据库的角度去解决问题,就不从service层解决

③ 向上取整

select ceil(数字);
在这里插入图片描述

④ 四舍五入

select round(数字);
在这里插入图片描述

⑤ 向下取整

select floor(数字);
在这里插入图片描述

⑥ 截取数字

select truncate(数字,取几位小数);
在这里插入图片描述

⑦ 随机排序

select * from 表名 order by rand();
在这里插入图片描述

2. string

① 全转换成大写

select ucase(‘字符串’);
在这里插入图片描述

② 全转换成小写

select lcase(‘字符串’);
在这里插入图片描述

③ 截取字符串

从左边从头开始截取:select left(‘字符串’, 取几位);
从右边从头开始截取:select right(‘字符串’, 取几位);
从左边任意位置开始截取:select substring(‘字符串’, 从哪个位置开始截取, 取几位);
在这里插入图片描述

④ 拼接字符串

select concat(‘字符串1’, ‘字符串2’);
在这里插入图片描述

concat另一个用法

select concat(字段名,‘想用什么符号隔开’, 字段名) from student;
在这里插入图片描述

3. 其它函数

① 获取当前时间

select now();
在这里插入图片描述

② 获取当前时间戳

select unix_timestamp();
在这里插入图片描述

③ 以年月日形式呈现当前时间

select year(now()) year, month(now()) month, day(now()) day;
在这里插入图片描述

④ 加密函数

select sha(‘字符串’);
在这里插入图片描述

⑤ select 配合 if函数 使用

参考文章在这里插入图片描述

六、内容出处

mysql

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com