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密码 数据库名 > 备份文件.sqlmysqldump -u用户名 -p密码 数据库名 表1 表2 > 备份文件.sql对库下面的表进行备份
- 多库备份
mysqldump -u用户名 -p密码 --databases 数据库1 数据库2 > 备份文件.sql - 备份所有
mysqldump -u用户名 -p密码 --all-databases > 备份文件.sql
导入
source D:\all.sql
函数
MySQL 05的更多相关文章
- PHP语言基础之MySql 05 By ACReaper
PHP的基本语法学完后,我们马上学下PHP如何和MySql进行交互.PHP和MySql进行交互的API可以分为两类,一类是面向过程的,一类是面向对象的,面向对象的我们等复习完面向对象再介绍,现在先介绍 ...
- MySQL 05章_模糊查询和聚合函数
在之前的查询都需要对查询的关机中进行“精确”.“完整”完整的输入才能查询相应的结果, 但在实际开发过程中,通常需要考虑用户可能不知道“精确”.“完整”的关键字, 那么就需要提供一种不太严格的查询方式, ...
- day48 Pyhton 数据库Mysql 05
一内容回顾 insert insert into 表名 (字段名) values (值) insert into 表名 values (有多少个字段写多少个值) insert into 表名 val ...
- MySQL实战 | 05 如何设计高性能的索引?
原文链接:MySQL | 05 如何设计高性能的索引? 上回我们主要研究了为什么使用索引,以及索引的数据结构.今天带你了解如何设计高性能的索引. 其中,有这么一个点,说的是 InnoDB 引擎中使用的 ...
- ch4 MySQL 安全管理
第 4 章 MySQL 安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司 ...
- mysql迁移-----拷贝mysql目录/load data/mysqldump/into outfile
摘要:本文简单介绍了mysql的三种备份,并解答了有一些实际备份中会遇到的问题.备份恢复有三种(除了用从库做备份之外), 直接拷贝文件,load data 和 mysqldump命令.少量数据使用my ...
- 第 4 章 MySQL 安全管理
前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切.本章将针对 MySQL 的 ...
- linux rpm方式安装mysql
01.搜索 mysql linux 网盘地址 http://pan.baidu.com/s/1qYOC6cs 02.把下载好的mysql 使用 xftp传到 linux中 software 文件 ...
- MySQL性能调优与架构设计——第4章 MySQL安全管理
第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...
随机推荐
- 别翻了,这篇文章就是要让你入门java多线程!
目录 1. 理解线程与进程 2.理解并行和并发 3.特殊的一个单线程:主线程(Main线程) 4. 创建多线程的四种方式 5.使用匿名内部类方式创建线程 6.线程安全问题 7.解决线程安全问题:线程同 ...
- Redis单节点数据同步到Redis集群
一:Redis集群环境准备 1:需要先安装好Redis集群环境并配置好集群 192.168.0.113 7001-7003 192.168.0.162 7004-7006 2:检查redis集群 [r ...
- Linux入门之安装及相关知识。
一.VMware虚拟机安装与使用 1.1.VMware 简介 VMware是一个虚拟PC的软件,可以在现有的操 作系统上虚拟出一个新的硬件环境,相当于模拟 出一台新的PC.以此来实现在一台机器上真正 ...
- opencv 6 图像轮廓与图像分割修复 3 图像的矩,分水岭,图像修补
图像的矩 矩的计算:moments()函数 计算轮廓面积:contourArea()函数 #include "opencv2/highgui/highgui.hpp" #inclu ...
- vim-plug 安装 jedi-vim
安装: Plug 'davidhalter/jedi-vim' :PlugInstall 我就在配置文件里写了一个配置项 let g:jedi#use_tabs_not_buffers = 1 进入定 ...
- 【译】为什么永远都不要使用MongoDB Why You Should Never Use MongoDB
背景 最近在学习DDIA(Designing Data-Intensive Applications)这本分布式领域非常急经典的入门书籍,里面第二章<数据模型与查询语言>,强调了对一对多. ...
- pyspark报错Exception: Java gateway process exited before sending its port number解决方法
1.问题 搭建spark的python环境好后简单使用,源代码如下: 然后就给我丢了一堆错误: 2.解决办法 这里指定一下Java的环境就可以了,添加代码: import os os.environ[ ...
- @NotEmpty、@NotNull、@NotBlank注解解析
源码解析 @NotEmpty根据JDK源码注释说明,该注解只能应用于char可读序列(可简单理解为String对象),colleaction,map,array上,因为该注解要求的是对象不为null且 ...
- Linux权限基础
Linux权限基础 四种权限大类 基本权限 特殊权限 隐藏权限 file ACL权限 三种基本权限 r(read) 读是基本权限,没有读权限其他的一切操作都会被限制 读 4 w(write) 写 2 ...
- appium环境的搭建
appium环境的搭建,之前看过很多关于appium环境搭建的文章,一个感觉就是“乱”. 所以才想自己来写一篇appium环境的搭建,算是总结和备忘吧. 如下图,其实appium的搭建分三部分完成,各 ...