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安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...
随机推荐
- sbt安装
使用 Scala 编写的程序需要使用 sbt 进行编译打包,官网sbt下载解压 在解压路径下创建脚本: #!/bin/bash SBT_OPTS="-Xms512M -Xmx1536M -X ...
- ssm 不能将查询的结果返回到界面的一个原因
* 在controller类中,应先定义一个ArrayList的集合即就是: List<Product> defaultProductList = new ArrayList(); // ...
- root权限后,不要忘了还有selinux
下面的例子运行在中兴android 5.0手机上. 当我们使用root权限的python去创建socket监听端口8088时,selinux向kmsg输出了下面的记录 python-android5 ...
- 【algo&ds】8.最小生成树
1.最小生成树介绍 什么是最小生成树? 最小生成树(Minimum spanning tree,MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图 ...
- vue响应式的注意事项
在html中出现无法显示对象属性的情况,可能是需要在初始化对象时,先定义好属性. <template> <div> <div v-else class="req ...
- Java每日一面(Part1:计算机网络)[19/11/25]
作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1. HTTP相关[2] 1.1Get请求和Post请求的区别 从三个层面来回答: 1.1.1 从HTTP报文层面: Get请求将请求信息放在UR ...
- 启动elasticsearch
- name: source env shell: source /etc/profile - name: make elastic permission shell: ...
- 根据本地ip获取地理位置,再根据地理位置,获取天气
import json,requestsfrom urllib.request import urlopenfrom pyquery import PyQuery as pqfrom lxml imp ...
- Roarctf 几道pwn 复现
1.easy_pwn 可以利用的点: __int64 __fastcall sub_E26(signed int a1, unsigned int a2) { __int64 result; // r ...
- leetcode105 从前序与中序遍历序列构造二叉树
如何遍历一棵树 有两种通用的遍历树的策略: 宽度优先搜索(BFS) 我们按照高度顺序一层一层的访问整棵树,高层次的节点将会比低层次的节点先被访问到. 深度优先搜索(DFS) 在这个策略中,我们采用深度 ...