MySQL的进阶操作
一,MySQL存储过程和函数
存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合
存储过程和函数的好处:
提高代码的复用性
减少数据在数据库和应用服务器之间的传输,提高效率
减少代码层面的业务处理
存储过程和函数的区别
存储函数必须有返回值
存储过程可以没有返回值
1,存储过程的创建和调用
创建存储过程
--修改结束分隔符
delimiter $--创建存储过程
create procedure 存储过程名称(参数列表)
beginSQL语句列表;
end $--修改结束分隔符
delimiter ;
调用存储过程
call 存储过程名称(实际参数);
存储过程的查看和删除
查看数据库中所有的存储过程
select * from MySQL.proc where db = '数据库名称';
--查看数据库中的存储过程
show procedure status where DB = '数据库名称';
删除存储过程
drop procedure [if exists] 存储过程名称;
2,存储过程语法-变量
定义变量
--定义变量
declare 变量名 数据类型 [default 默认值] ;
--变量赋值方式之一
set 变量名 = 变量值;
--变量赋值方式之二
select 列名 into 变量名 from 表名 [where 条件];
3,存储过程语法--if语句
if 判断条件 then 执行的sql语句1;
[elseif 判断条件 then 执行语句2;]
...
[else 执行的sql语句n;]
end if;
4,存储过程语法-参数传递
存储过程的参数和返回值
create procedure 存储过程名称(in|out|inout)参数名 数据类型)
beginsql语句;
end $
in:代表输入参数,需要由调用者传递实际数据(默认)
out:代表输出参数,该参数可以作为返回值
inout:单表即可以作为输入参数,也可以作为输出参数
5,存储过程语法-while循环
while循环语法
初始化语句;
while 条件判断语句 do循环体语句;条件控制语句;
end while;
6,存储函数
存储函数和存储过程是非常相识的,区别在于存储函数必须有返回值
创建存储函数
create function 函数名称(参数列表)
returns 返回值类型
begin sql语句列表;return 结果;
end$
调用存储函数
select 函数名称(实际参数);
删除存储函数
drop function 函数名称;
二,MySQL触发器
触发器是与表有关的数据库对象,可以在insert,update,delete之前或之后触发并执行触发器中定义的sql语句。
这种特征可以协助应用系统在数据库端确保数据的完整性,日志记录,数据校验操作
使用别名new 和old来引用触发器中发生变化的内容记录
1,触发器分类
触发器类型 | old | new |
insert 型触发器 | 无(因为插入前无数据) | new标识将要或者已经新增的数据 |
updae 型触发器 | old 标识修改之前的数据 | new表示将要或已经修改后的数据 |
delete 型触发器 | old 表示将要或者已经删除的数据 | 无(因为删除后状态无数据) |
2,创建触发器
delimiter$
create trigger 触发器名称
before|after insert|update|delete
on 表名
for each row
begin触发器要执行的功能;
end$
delimiter;
3,触发器的操作
查看触发器
show triggers;
删除触发器
drop trigger 触发器名称;
三,MySQL事务
事务:一条或多条sql语句组成一个执行单元,其特点是这个单元要么同时成功要么同时失败
单元中的每条sql语句的相互依赖,形成一个整体
如果某条sql语句执行失败或者出现错误,那么整个单元就会撤回到事务最初的状态
如果单元中所有的sql语句都执行成功,则事务就顺利执行
1,事务操作
开启事务
start transaction;
回滚事务
rollback;
提交事务
commit;
2,事务的四大特征
原子性:原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库中有任何影响
一致性:一致性是指事务必须使数据库从一个一执性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
隔离性:隔离性使当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
持久性:持久性是指一个事务一但被提交了,那么对数据库中的数据的改变就是永久性的,即使是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
3,事务的隔离级别
事务的隔离级别
多个客户操作时,各个客户端的事务之间应该时隔离的,相互独立的,不受影响的
而如果多个事务操作同一批数据时,就会产生不同的问题
隔离级别分类
隔离级别 | 名称 | 会引发的问题 |
read uncommitted | 读未提交 | 脏读,不可重复读,幻读 |
read committed | 读已提交 | 不可重复读,幻读 |
repeatable read | 可重复读 | 幻读 |
serializable |
串行化 | 无 |
引发的问题
问题 | 现象 |
脏读 | 在一个事务处理过程中读取到另一个未提交事务中的数据,导致两次查询结果不一致, |
不可重复读 | 在一个事务处理过程中读取到另一个事务中修改并提交的数据,导致两次查询结果不一致 |
幻读 | 查询某数据不存在,准备插入此记录,但执行插入时发现此纪录已经存在,无法插入,或者查询数据不存在执行删除操作,却发现删除成功。 |
查询数据库隔离级别
select @@TX_ISOLATION;
修改数据库隔离级别
set global transaction isolation level 级别字符串;
隔离级别总结
序号 | 隔离级别 | 名称 | 脏读 | 不可重复读 | 幻读 | 数据库默认隔离级别 |
1 | read uncommitted | 读未提交 | 是 | 是 | 是 | |
2 | read committed | 读已提交 | 否 | 是 | 是 | Oracle |
3 | repeatable read | 可重复读 | 否 | 否 | 是 | MySQL |
4 | serializable | 串行化 | 否 | 否 | 否 |
隔离级别从小到大安全性越高,但是效率越来越低,所以不建议修改数据库默认的隔离级别。
MySQL的进阶操作相关推荐
- MYSQL数据库进阶操作
一,基础强化 where语句的作用: 使用where子句对表中的数据筛选,结果为true的行会出现在结果集中. 1,as关键字 在使用SQL语句显示结果的时候,往往在屏幕显示的字段名并不具备良好的可读 ...
- MySQL的进阶实战篇
关联文章: MySQL的初次见面礼基础实战篇 MySQL的进阶实战篇 本篇上一篇博文MySQL的初次见面礼基础实战篇的延续,是mysql的进阶内容的记录,本篇主要知识点如下: 进阶实战篇 进阶实战篇 ...
- pdo mysql 绑定查询_php mysql PDO 查询操作的实例详解
php mysql PDO 查询操作的实例详解 php mysql PDO 查询操作的实例详解 这篇文章主要介绍了php mysql PDO 查询操作的实例详解的相关资料,希望通过本文能帮助到大家,需 ...
- 菜鸟的mysql高级进阶以及mysql数据库优化
菜鸟的mysql高级进阶以及mysql数据库优化 说明 一.mysql的逻辑分层及存储引擎 (1)逻辑分层 (2)存储引擎 二.事务的ACID原则 三.数据库设计的三大范式 四.索引 (1)二叉树搜索 ...
- MySQL数据库进阶版
文章目录 MySQL数据库进阶版 一.数据库的约束 1.NULL约束 2.唯一约束 unique 3.默认值约束 default 4.主键约束 primary key 5.外键约束 foreign k ...
- python学习 day41之MySQL表相关操作续集
MySQL表相关操作续集 七 数据类型 介绍 mysql常用数据类型概览 数值类型 1.整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 指令验证 2.浮 ...
- java连接数据库的进阶操作
文章目录 前言 一.连接池中我们需要什么样的jar包呢? 二.了解连接池连接数据库的硬编译 1.什么是硬编译? 三.学会连接池连接数据库的软编译 1.什么是软编译? 总结 前言 连接数据库是Java编 ...
- hadoop大数据开发技术学习笔记第三天:(前序)MySQL数据库进阶
hadoop大数据开发技术学习笔记第三天:(前序)MySQL数据库进阶 一.回顾知识 1.myschool数据库和数据表的创建 (1)创建数据库 (2)数据库模型图 (3)创建数据表grand (4) ...
- Linux系统firewalld防火墙的进阶操作(日志保存 IP网段 ssh服务)
文章目录 一.前文 二.打开日志 2.1 修改配置 2.2 测试验证 2.3 日志保存到本地 三.允许IP网段 四.关闭ssh 一.前文 基础知识请查阅:Linux系统firewalld防火墙的基本操 ...
最新文章
- 分析输入url到页面返回的过程(查询返回过程)
- 在java中重写方法应遵循规则的包括_Java面试题集合篇二
- Java设计模式之行为型:迭代器模式
- java 实现 tcp_java实现TCP通信
- Magicodes.IE 2.5.5.3发布
- 什么是 CD 管道?一文告诉你如何借助Kubernetes、Ansible和Jenkins创建CD管道!
- Bootstrap页面布局10 - BS表格
- 《计算机网络》第三章:数据链路层(The Data Link Layer)
- 分享一份自己整理的PPT--数据分析师的业务流程和常规思维
- ubuntu18设置屏幕旋转_无线电对讲机,常用电台上中继台设置
- 测度论与概率论基础(程士宏)学习笔记(一)
- UVA1386 Cellular Automaton
- Android开发技术周报 Issue#8
- 蓝奏批量替换自定义域名php源码
- 投票php实验结果分析与总结,实验的结果分析怎么写
- 前大灯是近光灯还是远光灯_大灯是近光灯还是远光灯
- 全网最全之接口测试【加密解密攻防完整版】实战教程详解
- 手把手教你ARC——iOS/Mac开发ARC入…
- 闲聊HTML5的新特性
- 网络安全三同步怎么实施
热门文章
- 暴风影音IOS版为推出新版本竟“杀掉程序员祭天”!
- 【转载】C++跑酷小游戏
- Cocos Analytics 拍了拍你,并向你连发3条消息
- CentOS 7 启动Tomcat 报错 “ ./startup.sh: Permission denied” 解决方案及问题总结
- 如何编写和实施SOP?
- WinMount V3.2.0804 for xp 32位版本 日期2009.08.04
- 触发器新增、修改、删除
- 手机高端化,需要不同却被认同
- java使用aspose-words无损格式转pdf文件
- 操作layui 的checkbox