mysql 05_MySQL 05
事务
基本概念
事务: Transaction
事务是由一个或多个sql语句构成的逻辑单元, 是一个整体的概念
作用: 使得一系列sql语句要么全部完成, 要目全部不完成, 保证了数据库的完整性
四大特性(ACID)
原子性 (Atomicity): 事务是最小执行单位, 不可再分, 既一个事务中的所有操作, 要么全部完成, 要么全部不完成
一致性 (Consistency): 事务开始之前和结束之后, 数据库的完整性没有被破坏
隔离性 (Isolation): 数据库支持多个事务并发, 隔离性可以防止事务交叉执行导致的不一致
读未提交
读提交
可重复读
串行化
持久性 (Durability): 事务处理结束后, 对数据的修改时永久的
使用方法
start transaction; 开启
commit; 提交
rollback; 回滚
第一步: 开启事务, 执行操作
# alpha 对 bravo 转账 100
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 1000 |
| 2 | bravo | 1000 |
+----+-------+-------+
2 rows in set (0.00 sec)
# 开启事务
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> update balance set money=1000-100 where name='alpha';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update balance set money=1000+100 where name='bravo';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 900 |
| 2 | bravo | 1100 |
+----+-------+-------+
2 rows in set (0.00 sec)
第二步: 此时我们还未提交事物, 我们新开一个窗口, 查看一下balance表
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 1000 |
| 2 | bravo | 1000 |
+----+-------+-------+
2 rows in set (0.00 sec)
第三步: 然后我们提交事物
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 900 |
| 2 | bravo | 1100 |
+----+-------+-------+
2 rows in set (0.00 sec)
第四步: 在新的窗口查看balance表, 数据修改成功
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 900 |
| 2 | bravo | 1100 |
+----+-------+-------+
2 rows in set (0.00 sec)
如果我们在第三步的时候不提交, 回滚一下事务
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 1000 |
| 2 | bravo | 1000 |
+----+-------+-------+
2 rows in set (0.00 sec)
# 开启事务
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> update balance set money=1000-100 where name='alpha';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update balance set money=1000+100 where name='bravo';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 900 |
| 2 | bravo | 1100 |
+----+-------+-------+
2 rows in set (0.00 sec)
# 回滚事务
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
# 数据没有被修改
mysql> select * from balance;
+----+-------+-------+
| id | name | money |
+----+-------+-------+
| 1 | alpha | 1000 |
| 2 | bravo | 1000 |
+----+-------+-------+
2 rows in set (0.00 sec)
存储引擎
InnoDB (MySQL默认)
MyISAM (我的阿萨姆?)
区别
InnoDB支持事务
InnoDB支持行锁(并发), MyISAM只支持表锁
视图
基本概念
根据select查询语句得到一个具有名称的动态数据集, 用户只要通过视图名称就可获取这个数据集
使用方法
增加视图 create view 视图名 as select查询语句
使用视图 (相当于一个表) select * from 视图名
删除视图 drop view 视图名
mysql> select * from user_info;
+----+---------+----------+
| id | name | password |
+----+---------+----------+
| 1 | bigb | 111111 |
| 2 | blake | 222222 |
| 3 | black | 333333 |
| 4 | alpha | 111111 |
| 5 | bravo | 222222 |
| 6 | charlie | 333333 |
| 7 | delta | 111111 |
| 8 | echo | 222222 |
| 9 | foxtrot | 333333 |
+----+---------+----------+
9 rows in set (0.00 sec)
mysql> select * from user_info where name='alpha';
+----+-------+----------+
| id | name | password |
+----+-------+----------+
| 4 | alpha | 111111 |
+----+-------+----------+
1 row in set (0.00 sec)
# 创建视图
mysql> create view v1 as select * from user_info where name='alpha';
Query OK, 0 rows affected (0.01 sec)
# 使用视图
mysql> select * from v1;
+----+-------+----------+
| id | name | password |
+----+-------+----------+
| 4 | alpha | 111111 |
+----+-------+----------+
1 row in set (0.00 sec)
# 如果我们对原表记录进行了修改, 发现视图中的数据也进行了相应的修改, 因此通过视图得到是一个动态的数据集
mysql> update user_info set password='888888' where name='alpha';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from v1;
+----+-------+----------+
| id | name | password |
+----+-------+----------+
| 4 | alpha | 888888 |
+----+-------+----------+
1 row in set (0.00 sec)
# 删除视图
mysql> drop view v1;
Query OK, 0 rows affected (0.00 sec)
触发器
基本概念
对表1进行某些特定操作时会触发对表2的某些特定操作
使用方法
创建触发器
delimiter 结束符号(自定义)
create trigger 触发器名 before/after 触发事件 on 表名 for each row
begin
触发器触发的内容;
end 结束符号
delimiter; # 将结束符号改回;
例子: 实现对 t1 添加记录时 , 也向 t2 添加一条记录
# t1 和 t2 为两个空表
mysql> select * from t1;
Empty set (0.00 sec)
mysql> select * from t2;
Empty set (0.00 sec)
# 创建触发器
mysql> delimiter //
mysql> create trigger tri_nb after insert on t1 for each row
-> begin
-> insert into t2 (name) values ('bravo');
-> end //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
# 对 t1 进行操作
mysql> insert into t1 (name) values ('alpha');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+----+-------+
| id | name |
+----+-------+
| 1 | alpha |
+----+-------+
1 row in set (0.00 sec)
mysql> select * from t2;
+----+-------+
| id | name |
+----+-------+
| 1 | bravo |
+----+-------+
1 row in set (0.00 sec)
存储过程
基本概念
对sql语句进行了封装, 方便后期调用, 相当于MySQL中的函数
使用方法
创建
delimiter 结束符号
create procedure p1(IN 参数 int) # IN表示传入参数, 参数类型为int
begin
sql语句;
end 结束符号
delimiter 结束符号
使用
call p1(参数);
删除
drop procedure p1;
例子
+----+---------+----------+
| id | name | password |
+----+---------+----------+
| 1 | bigb | 111111 |
| 2 | blake | 222222 |
| 3 | black | 333333 |
| 4 | alpha | 888888 |
| 5 | bravo | 222222 |
| 6 | charlie | 333333 |
| 7 | delta | 111111 |
| 8 | echo | 222222 |
| 9 | foxtrot | 333333 |
+----+---------+----------+
# 创建
mysql> delimiter //
mysql> create procedure p1(IN p_in int)
-> begin
-> select * from user_info where id = p_in;
-> end //
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
# 调用
mysql> call p1(3);
+----+-------+----------+
| id | name | password |
+----+-------+----------+
| 3 | black | 333333 |
+----+-------+---------+
1 row in set (0.00 sec)
数据备份
备份
单库备份
mysqldump -u用户名 -p密码 数据库名 > 备份文件.sql
mysqldump -u用户名 -p密码 数据库名 表1 表2 > 备份文件.sql 对库下面的表进行备份
多库备份 mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > 备份文件.sql
备份所有 mysqldump -u用户名 -p密码 --all-databases > 备份文件.sql
导入
source D:\all.sql
函数
mysql 05_MySQL 05相关推荐
- 【MySQL】- 05 sql 语句练习题
sql 语句练习题 一 测试数据的准备 二.数据查询 1.`查询"01"课程比"02"课程成绩高的学生的信息及课程分数` 2.`查询"01" ...
- MySQL数据库05 数据库控制和设计
DCl 语句 数据库控制 controller 数据库的用户 root是超级管理员用户,很容易引发由于误操作所导致的数据不安全问题 查看mysql 数据库的mysql 数据库 user 表 存储了my ...
- 【MySQL进阶-05】深入理解mvcc机制(详解)
MySql系列整体栏目 内容 链接地址 [一]深入理解mysql索引本质 https://blog.csdn.net/zhenghuishengq/article/details/121027025 ...
- mysql 笔记05 select语句以及条件语句的使用
select语句 过滤重复语句(distinct) 举例: 查询学生的总分 select name, math + English + China as '总分' from students; 在姓赵 ...
- 第一章·MySQL介绍及安装
一.DBA工作内容及课程体系 二.MySQL课程体系介绍 三.DBA的职业素养 四.MySQL简介及安装 01 什么是数据? 02 什么是数据库管理系统 03 数据库管理系统种类 04 MySQL发展 ...
- 树莓派无法安装mariadb_RaspberryPi(树莓派)如何安装 MariaDB / MySQL 数据库
安装的过程比较简单. 但是这里有一个地方需要注意,如果你希望是能够通过网络访问你安装的数据库的话. 在你设置好用户名和密码,以及访问权限后,你可能发现你还是访问不了. 这是因为你的安装服务器只绑定了能 ...
- MYSQL的安装基础语法笔记
MYSQL基础语法 学习目标 能够理解数据库的概念(知道数据库是用来干嘛的) 能够安装MySQL数据库 能够启动,关闭及登录MySQL 能够使用SQL语句操作数据库(创建.删除.修改.查询数据库) 能 ...
- suse11 mysql 5.7_SUSE Linux系统中单实例二进制方式安装MySQL 5.7.22
下面将在SUSE Linux 11 64位操作系统中以单实例二进制包方式安装MySQL 5.7.22版本数据库.以下的ywnzlinux是机器的主机名,详细安装步骤如下: 一.环境准备 操作系统是SU ...
- GreatSQL vs MySQL性能测试来了,速围观~
* GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1.结论先行 无论ibp(innodb_buffer_pool_size)是否充足,MySQL的性能都远不如Great ...
- Linux环境下安装MySQL(源码安装)
Linux环境下安装MySQL(源码安装) 1.事先从官网/国内镜像站点中下载源码安装包,上传至服务器: 2.安装开发工具和开发包(从5.5开始使用cmake编译) 3.创建用户和组 4.编译安装My ...
最新文章
- 再学 GDI+[83]: TGPImage(3) - 平行四边形变换
- Python 技术篇-利用pymouse库操作windows系统电脑实现鼠标指针移动、点击
- JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
- gitHub使用记录
- Spring Boot Redis 入门
- 如果沟通有范式,它会是怎么样子?
- 微信小程序--数据存储
- c语言函数大全doc,c语言函数大全.doc
- python中input数组_python – 在NumPy数组中搜索序列
- cmb网站服务器失去响应代码,3.5.2 连接到服务器并响应各种连接事件(2)
- linux 远程链接数据库报错host *** is not allowed to connect to this mysql server
- Oracle中“行转列”的实现方式
- 设计模式-工厂模式-3种-以手机制造工厂为例
- 微信公众号--素材管理
- 数据库系统原理与应用教程(039)—— MySQL 查询(一):SELECT 命令的语法分析
- 免费馅饼 (数据结构)
- 微信营销七(微信朋友圈发文技巧)
- 纽约2050交通发展战略——高效移动性
- console使用方法介绍
- 卡尔曼滤波与航迹融合
热门文章
- win教程:如何查看本机的IP地址
- Python-torch.optim优化算法理解之optim.Adam()
- 支付交易相关接口文档对接
- C如何简单的读写文件?二进制文件如何读写?如何移动文件指针?
- BATT入局,小程序成超级APP连接一切的枢纽
- [教学]基于crnn的中文汉字识别_pyqt界面交互界面python含代码
- 土方回填施工方案范本_土方回填施工方案范本
- dell 服务器启用虚拟化,打开DELL R410服务器BIOS虚拟化步骤(图文教程)
- 【系】微信小程序云开发实战坚果商城-前端之分类实现
- 阿里云OSS上传图片慢的处理方案