Skr-Eric的Mysql课堂(六)——Mysql的锁、存储引擎、事务、数据的导入导出及备份恢复

本文主要是介绍Skr-Eric的Mysql课堂(六)——Mysql的锁、存储引擎、事务、数据的导入导出及备份恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1、目的 :解决客户端并发访问的冲突问题

  2、锁分类

    1、锁类型

      1、读锁(共享锁)

        查询(select):加读锁之后,别人不能更改表记录,但可以进行查询

      2、写锁(互斥锁、排他锁)

        更新(update):加写锁之后别人不能查、不能改

    2、锁粒度

      1、行级锁 :Innodb

        select :加读锁,锁1行

         update :加写锁,锁1行

      2、表级锁 :MyISAM

        select :加读锁,锁1张表

       update :加写锁,锁1张表

 

存储引擎(engine :处理表的处理器)

  1、基本操作命令

    1、查看所有存储引擎

      show engines;

    2、查看已有表的存储引擎

      show create table 表名;

    3、创建表指定存储引擎

      create table 表名(...)engine=myisam,charset=utf8;

    4、已有表

      alter table 表名 engine=myisam;

  2、常用存储引擎的特点

    1、InnoDB特点

      1、支持事务、外键、行级锁

      2、共享表空间

        表名.frm :表结构和索引信息  

表名.ibd : 表记录

    2、MyISAM特点

      1、支持表级锁

      2、独享表空间

        表名.frm :表结构

       表名.MYD :表记录

       表名.MYI :索引信息

    3、Memory存储引擎

      1、数据存储在内存中,速度快

      2、服务器重启、MySQL服务重启后表记录消失

  3、如何决定使用哪个存储引擎

    1、查询操作多的表使用MyISAM(使用InnoDB浪费资源)

    2、写操作多的表使用InnoDB

 

事务和事务回滚应用

    1、SQL命令会 autocommit 到数据库执行

    2、事务操作

      1、开启事务

        mysql> begin;   |  start transactions;

        mysql> SQL命令 ...

  ## 此时autocommit被禁用 ##

      2、终止事务

        mysql> commit; | rollback;

    3、案例

      1、背景

        你 :建行卡

朋友 :工行卡

你在建行自动取款机 给你朋友 转5000块钱

      2、建表

        表1、CCB

          create table CCB(

  name varchar(20),

  money decimal(20,2)

  );

  insert into CCB values("有钱人",100000);

表2、ICBC

  create table ICBC(

  name varchar(20),

  money decimal(20,2)

  );

  insert into ICBC values("没钱人",0);

      3、开始转账

成功:

        mysql> begin;

mysql> update CCB set money=money-5000 where name="有钱人";

mysql> update ICBC set money=money+5000 where name="没钱人";

mysql> commit;

#####转账成功#####

 

失败 :

mysql> begin;

mysql> update CCB set money=money-5000 where name="有钱人";

mysql> update ICBC set 工行服务器故障... ;

mysql> rollback;

#####转账失败#####

 

数据导出

  1、把数据库表的记录到处到系统文件里

  2、语法格式

    select ... from 表名

    into outfile "文件名"

    fileds terminated by "分隔符"

    lines terminated by "\n";

  3、练习

    1、把MOSHOU库下的sanguo表中,英雄的姓名、攻击值和国家给导出来,sanguo.csv

      1、查看搜索路径

        show variables like "%secure%";

      2、执行数据导出语句

        select name,gongji,country from MOSHOU.sanguo

into outfile "/var/lib/mysql-files/sanguo.csv"

fields terminated by ","

lines terminated by "\n";

 

Error: ... secure_file_priv ...

    2、把 mysql 库下的user表中 user、host的值导出到系统文件 user.txt

      select user,host from mysql.user

      into outfile "/var/lib/mysql-files/user.txt"

      fields terminated by "   "

      lines terminated by "\n";

  4、查看、更改文件权限

    1、ls -l score.txt

      -  rw-  rw-  r--   tarena   tarena

      r(4) : 读           所有者   所属组

     w(2) : 写

     x(1) : 可执行

        rw- : 所有者权限

       rw- : 同组其他用户文件

        r-- : 其他组的用户权限

    2、chmod 777 score.txt

       chmod 740 score.txt

 

表的复制

  1、语法

    create table 表名 select ... from 表名 where 条件;

  2、示例

    1、复制MOSHOU.sanguo表,sanguo2

      create table MOSHOU.sanguo2 select * from MOSHOU.sanguo;

    2、复制MOSHOU.sanguo中的id、name、country的记录,sanguo3

      create table MOSHOU.sanguo3 select id,name,country from MOSHOU.sanguo;

    3、复制MOSHOU.sanguo中的name、country,每页显示2条记录,复制第3页的内容

      create table MOSHOU.sanguo4 select name,country from sanguo limit 4,2;

  3、复制表结构

    create table 表名 select ... from 表名 where false;

 

数据备份(mysqldump,在Linux终端操作)

  1、命令格式

    mysqldump -u用户名 -p 源库名 > ***.sql

  2、源库名的表示方式

    --all-databases    备份所有库

    库名               备份1个库

    -B 库1 库2 库3     备份多个库

    库名 表1 表2 表3   备份多张表

  3、练习

    1、备份所有库,放到mydata目录下 :All.sql

      mysqldump -uroot -p --all-databases > All.sql

    2、备份db4库中的 sheng、city、xian三张表,db4scx.sql

      mysqldump -uroot -p db4 sheng city xian > db4scx.sql

    3、备份MOSHOU和db4两个库,md.sql

      mysqldump -uroot -p -B db4 MOSHOU > md.sql

 

数据恢复

  1、命令格式(Linux终端)

    mysql -u用户名 -p 目标库名 < ***.sql

  2、从所有库备份All.sql中恢复某一个库

    mysql -u用户名 -p --one-database 库名 < All.sql

    mysql -uroot -p --one-database db4 < All.sql

  3、示例

    1、在db4.sheng添加一条记录

      insert into sheng values(null,300000,"黑龙江");

    2、在db4库,新建一张表t888

      create table t888(id int);

    3、从 db4.sql 恢复db4库

      mysql -uroot -p db4 < db4.sql

    注意 :

      1、恢复库时,如果恢复到原库会将表中数据覆盖,新增表不会删除

      2、恢复库时,如果库不存在,则必须先创建空库

 

 

想要看更多的课程请微信关注SkrEric的编程课堂

这篇关于Skr-Eric的Mysql课堂(六)——Mysql的锁、存储引擎、事务、数据的导入导出及备份恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807025

相关文章

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结