MySQL(二)
转自:http://www.cnblogs.com/wupeiqi/articles/5713323.html
1|0视图
不推荐使用,因为改视图可能需要DBA去修改。直接在代码里写子查询就行。
视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。
1|11、创建视图
1|22、删除视图
1|33、修改视图
1|44、使用视图
使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。
2|0触发器
对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。
2|11、创建基本语法
插入前触发器
插入后触发器
特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行。插入有新数据,删除有老数据。update更新的时候新数据、老数据都有。
2|22、删除触发器
2|33、使用触发器
触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。
3|0 函数
MySQL中提供了许多内置函数,例如:
更多函数:官方猛击这里
1、自定义函数
2、删除函数
3、执行函数
4|0存储过程
存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。
保存在MySQL上,用于代替程序员写SQL语句。(MySQL存储过程用的比较少)
方式一:
MySQL:储存过程
程序:调用储存过程
方式二:
MySQL:什么都不干
程序:SQL语句
方式三:
MySQL:什么都不干
程序:类和对象(SQL语句)
mysql查看已经创建的存储过程
4|11、创建存储过程
无参数的存储过程
对于存储过程,可以接收参数,其参数有三类:
- in 仅用于传入参数用
- out 仅用于返回值用,存储过程中不能使用(查看)
- inout 既可以传入又可以当作返回值
有参数的存储过程(in)
有参数的存储过程(out),用以标识存储过程的执行结果
(inout)相当于in + out 的功能
事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
- 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
- 事务用来管理 insert,update,delete 语句
一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
-
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
-
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
-
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
-
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
事务控制语句:
-
BEGIN 或 START TRANSACTION 显式地开启一个事务;
-
COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;
-
ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
-
SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
-
RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
-
ROLLBACK TO identifier 把事务回滚到标记点;
-
SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交
事务测试
事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。
游标(性能低,dba比较多用),对于每一行数据要分门别类计算才用游标
动态执行SQL(防SQL注入)
-
-
5|0索引
索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。
索引种类(某种格式存储):
hash索引:根据相应的数据做hash,然后创建一张索引表,关联这个hash值和数据存储地址;
但是有个问题,hash值得顺序跟数据表里面的顺序不一样。单值的情况下会非常快,但是范围会慢,甚至比原来的数据库查找还慢;
btree索引:二叉树的形式。(innodb用的是btree索引)
1
2
3
4
5
6
7
|
30 10 40 5 15 35 66 1 6 11 19 21 39 55 100 |
MySQL中常见索引有:
- 主键索引:加速查找 + 不能为空 + 不能重复
- 普通索引:加速查找
- 唯一索引:加速查找 + 不能重复
- 联合索引(多列):
- 联合主键索引
- 联合唯一索引
- 联合普通索引
建立索引:
1、额外的文件保存特殊的数据结构
2、查询快,插入更新删除慢
3、需要命中索引
5|11、普通索引
普通索引仅有一个功能:加速查询
创建表 + 索引
创建索引
删除索引
查看索引
注意:对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length。
5|22、唯一索引
唯一索引有两个功能:加速查询 和 唯一约束(可含null)
创建表 + 唯一索引
创建唯一索引
删除唯一索引
5|33、主键索引
主键有两个功能:加速查询 和 唯一约束(不可含null)
创建表 + 创建主键
创建主键
删除主键
5|44、组合索引
组合索引是将n个列组合成一个索引
其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = 'alex' and n2 = 666。
创建表
创建组合索引
如上创建组合索引之后,查询:
- name and email -- 使用索引
- name -- 使用索引
- email -- 不使用索引
注意:对于同时搜索n个条件时,组合索引的性能好于多个单一索引合并。
6|0其他
6|11、条件语句
6|22、循环语句
while 循环
repeat 循环
loop
6|33、动态执行SQL语句
__EOF__

本文链接:https://www.cnblogs.com/dongye95/p/9153740.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!