事务

基本概念

事务: 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相关推荐

  1. 【MySQL】- 05 sql 语句练习题

    sql 语句练习题 一 测试数据的准备 二.数据查询 1.`查询"01"课程比"02"课程成绩高的学生的信息及课程分数` 2.`查询"01" ...

  2. MySQL数据库05 数据库控制和设计

    DCl 语句 数据库控制 controller 数据库的用户 root是超级管理员用户,很容易引发由于误操作所导致的数据不安全问题 查看mysql 数据库的mysql 数据库 user 表 存储了my ...

  3. 【MySQL进阶-05】深入理解mvcc机制(详解)

    MySql系列整体栏目 内容 链接地址 [一]深入理解mysql索引本质 https://blog.csdn.net/zhenghuishengq/article/details/121027025 ...

  4. mysql 笔记05 select语句以及条件语句的使用

    select语句 过滤重复语句(distinct) 举例: 查询学生的总分 select name, math + English + China as '总分' from students; 在姓赵 ...

  5. 第一章·MySQL介绍及安装

    一.DBA工作内容及课程体系 二.MySQL课程体系介绍 三.DBA的职业素养 四.MySQL简介及安装 01 什么是数据? 02 什么是数据库管理系统 03 数据库管理系统种类 04 MySQL发展 ...

  6. 树莓派无法安装mariadb_RaspberryPi(树莓派)如何安装 MariaDB / MySQL 数据库

    安装的过程比较简单. 但是这里有一个地方需要注意,如果你希望是能够通过网络访问你安装的数据库的话. 在你设置好用户名和密码,以及访问权限后,你可能发现你还是访问不了. 这是因为你的安装服务器只绑定了能 ...

  7. MYSQL的安装基础语法笔记

    MYSQL基础语法 学习目标 能够理解数据库的概念(知道数据库是用来干嘛的) 能够安装MySQL数据库 能够启动,关闭及登录MySQL 能够使用SQL语句操作数据库(创建.删除.修改.查询数据库) 能 ...

  8. suse11 mysql 5.7_SUSE Linux系统中单实例二进制方式安装MySQL 5.7.22

    下面将在SUSE Linux 11 64位操作系统中以单实例二进制包方式安装MySQL 5.7.22版本数据库.以下的ywnzlinux是机器的主机名,详细安装步骤如下: 一.环境准备 操作系统是SU ...

  9. GreatSQL vs MySQL性能测试来了,速围观~

    * GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1.结论先行 无论ibp(innodb_buffer_pool_size)是否充足,MySQL的性能都远不如Great ...

  10. Linux环境下安装MySQL(源码安装)

    Linux环境下安装MySQL(源码安装) 1.事先从官网/国内镜像站点中下载源码安装包,上传至服务器: 2.安装开发工具和开发包(从5.5开始使用cmake编译) 3.创建用户和组 4.编译安装My ...

最新文章

  1. 再学 GDI+[83]: TGPImage(3) - 平行四边形变换
  2. Python 技术篇-利用pymouse库操作windows系统电脑实现鼠标指针移动、点击
  3. JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
  4. gitHub使用记录
  5. Spring Boot Redis 入门
  6. 如果沟通有范式,它会是怎么样子?
  7. 微信小程序--数据存储
  8. c语言函数大全doc,c语言函数大全.doc
  9. python中input数组_python – 在NumPy数组中搜索序列
  10. cmb网站服务器失去响应代码,3.5.2 连接到服务器并响应各种连接事件(2)
  11. linux 远程链接数据库报错host *** is not allowed to connect to this mysql server
  12. Oracle中“行转列”的实现方式
  13. 设计模式-工厂模式-3种-以手机制造工厂为例
  14. 微信公众号--素材管理
  15. 数据库系统原理与应用教程(039)—— MySQL 查询(一):SELECT 命令的语法分析
  16. 免费馅饼 (数据结构)
  17. 微信营销七(微信朋友圈发文技巧)
  18. 纽约2050交通发展战略——高效移动性
  19. console使用方法介绍
  20. 卡尔曼滤波与航迹融合

热门文章

  1. win教程:如何查看本机的IP地址
  2. Python-torch.optim优化算法理解之optim.Adam()
  3. 支付交易相关接口文档对接
  4. C如何简单的读写文件?二进制文件如何读写?如何移动文件指针?
  5. BATT入局,小程序成超级APP连接一切的枢纽
  6. [教学]基于crnn的中文汉字识别_pyqt界面交互界面python含代码
  7. 土方回填施工方案范本_土方回填施工方案范本
  8. dell 服务器启用虚拟化,打开DELL R410服务器BIOS虚拟化步骤(图文教程)
  9. 【系】微信小程序云开发实战坚果商城-前端之分类实现
  10. 阿里云OSS上传图片慢的处理方案