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安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...
随机推荐
- 用这个库 3 分钟实现让你满意的表格功能:Bootstrap-Table
本文作者:HelloGitHub-kalifun 这是 HelloGitHub 推出的<讲解开源项目>系列,今天给大家推荐一个基于 Bootstrap 和 jQuery 的表格插件:Boo ...
- 在C\C++中char 、short 、int各占多少个字节
在C\C++中char .short .int各占多少个字节 : #include <bits/stdc++.h> using namespace std; int main() { co ...
- 如何解决UNMOUNTABLE BOOT VALUME
Windows error:UNMOUNTABLE BOOT VALUME 解决方法:Windows 修复工具 chkdsk命令 chkdsk D:/f ps:chkdsk 磁盘名 /f
- hdu 1817 Necklace of Beads (polya)
Necklace of Beads Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- ZeroC ICE的远程调用框架 代理引用地址
在官方文档中称为Binding,协议-地址对的绑定.在Proxy模式中,一般地有三个参与者,Proxy,Subject以及RealSubject.Subject定义了Proxy(代理)和RealSub ...
- 【Stream—6】BufferedStream相关知识分享
一.简单介绍以下BufferedStream 在前几章的讲述中,我们已经能够掌握流的基本特性和特点,一般进行对流的处理时,系统肩负着IO所带来的开销,调用十分频繁,这时候就应该想个办法减少这种开销,而 ...
- Handler+Looper+MessageQueue深入详解
概述:Android中的异步处理机制由四部分组成:Handler+Looper+MessageQueue+message,用于实现线程间的通信. 用到的概念: Handler: 主要作用是发送消息和处 ...
- nginx集群架构
Linux集群从功能分类 高可用集群,高可用集群通常为俩台服务器,一台工作,另一台冗余,当提供服务器的服务器宕机时候,冗余服务器将接替宕机的服务器继续提供服务.实现高可用的集群开源软件有Heatbea ...
- 是谁,在敲打我窗-CSS雨滴动画效果
1.扯闲篇 是谁在敲打我窗 是谁在撩动琴弦 那一段被遗忘的时光 渐渐地回升出我心坎 是谁在敲打我窗 是谁在撩动琴弦 记忆中那欢乐的情景 慢慢地浮现在我的脑海 那缓缓飘落的小雨 不停地打在我 ...
- mybatis的@Options的使用
1.问题: 我采用的是mybatis的注解方式,打算插入一条数据之后返回主键,但是试了好几次都是返回的影响的记录数:1, @Insert(****) @Options(useGeneratedKeys ...