MySQL--事务+存储引擎+表类型+视图+用户管理

2023-11-11

目录

1.事务

1.1 概念:

1.2 回退事务

1.3提交事务

1.4事务细节注意点

1.5事务的隔离级别

1.5.1 介绍

1.5.2 解决这些安全性问题

1.5.3演示脏读

1.5.4避免脏读,演示不可重复发生

1.5.5 演示不可重复读

1.5.6演示串行化

1.6事务的ACID特性

1.6.1 原子性

1.6.2一致性

1.6.3 隔离性

1.6.4 持久性

2. mysql 表类型和存储引擎

2.1基本介绍

2.2主要的存储引擎/表类型特点

2.3细节说明

2.3.1三种存储引擎表使用案例

2.4如何选择表的存储引擎

2.5 修改存储引擎

3.视图(view)

3.1视图的作用

3.2视图和基表的关系

3.3视图的基本使用

3.4视图的注意点

3.5视图的优点

3.6视图的练习

4.MySQL用户管理

4.1概念:

4.2创建用户

4.3删除用户

4.4用户修改密码

4.5mysql 中的权限

4.6给用户授权

4.7回收用户授权

4.8权限生效指令


1.事务

1.1 概念:

事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败,例如:转账就要用事务来处理,用以保证数据的一致性。

 

回滚:手动开始一个保存点,并且设置一个事务

 

-- 事务的一个重要的概念和具体操作 
-- 看一个图[看示意图] 
-- 演示
-- 1. 创建一张测试表
CREATE TABLE t27 (
    id INT, 
    `name` VARCHAR(32));
    -- 2. 开始事务 
    START TRANSACTION 
    -- 3. 设置保存点 
    SAVEPOINT a
    -- 执行 dml 操作
    INSERT INTO t27 VALUES(100, 'tom');
    SELECT * FROM t27;
    SAVEPOINT b 
    -- 执行 dml 操作 
    INSERT INTO t27 VALUES(200, 'jack');
    -- 回退到 b 
    ROLLBACK TO b 
    -- 继续回退 a
    ROLLBACK TO a 
    -- 如果这样, 表示直接回退到事务开始的状态.
    ROLLBACK COMMIT

1.2 回退事务

保存点:保存点时事务中的点,用于取消部分事务

当结束事务时,会自动删除该事务所定义的所有保存点,当执行回退事务时,通过指定的保存点可以回退到指定的点。

1.3提交事务

使用commit语句可以提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁,数据生效,当使用commit语句结束事务之后,其他会话[其他连接],将可以查看事务变化之后的新数据[所以数据将正式生效]

1.4事务细节注意点

1.如果不开始事务,默认情况下,dml时自动提交的,不能回滚。

2.如果开始一个事务,你没有创建保存点,你可以执行rollback,默认就是回滚到你事务开始的状态

3.你可以在这个事务中(还没有提交时),创建多个保存点。比如:savepoint aaa;执行dml,savepoint bbb

4.你可以在事务没有提交前,选择回退到哪个保存点

5.mysql的事务机制需要innobd的存储引擎才可以使用,myisam不好使

6.开始一个事务start transaction ,set autocommit=off;

1.5事务的隔离级别

1.5.1 介绍

隔离性:一个事务的执行,不应该受到其他事务的干扰。

1.多个事务开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性;

2.如果不考虑隔离性(一个事务执行受到其他的事务的干扰),引发一些安全问题,主要体现在读取数据上:

  • 脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致

  • 不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。

  • 虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。

    1.5.2 解决这些安全性问题

 

1.5.3演示脏读

开启两个窗口A,B

设置A窗口的隔离级别为read uncommitted;

SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted;

在A,B两个窗口中开启事务

 

start transaction;

在B窗口中完成转账的功能:

update account set money = money - 1000 where name= '小张';
​
update account set money = money + 1000 where name= '小凤';

*** 事务未提交!!!

 

在A窗口中进行查询

select * from account;

***发现A窗口中已经查询到转账成功了!!!已经发生了脏读:一个事务中已经读到了另一个事务未提交的数据。

 

1.5.4避免脏读,演示不可重复发生

开启两个窗口A,B

设置A窗口的隔离级别为read committed;

SET SESSION TRANSACTION ISOLATION LEVEL read committed;

分别在两个窗口中开启事务:

 

start transaction;

在B窗口中完成转账

update account set money = money - 1000 where name= '小张';
​
update account set money = money + 1000 where name= '小凤';

 

*** 没有提交事务!!!

 

在A窗口中进行查询:

select * from account;

*** 发现这个时候没有转账成功!!!(没有查询到另一个事务未提交的数据:说明已经避免了脏读)。

 

在B窗口中提交事务

commit;

在A窗口查询

select * from account;

*** 发现这次的结果已经发生了变化!!!(已经发生不可重复读:一个事务已经读到了另一个事务提交的update的数据,导致多次查询结果不一致。)

 

1.5.5 演示不可重复读

分别开启两个窗口A,B

设置A窗口的隔离级别:repeatable read;

SET SESSION TRANSACTION ISOLATION LEVEL repeatable read;

在A,B两个窗口中开启事务:

 

start transaction;

在B窗口完成转账

update account set money = money - 1000 where name= '小张';

update account set money = money + 1000 where name= '小凤';

*** 未提交事务!!!

 

在A窗口中进行查询

select * from account;

*** 发现没有转账成功:说明避免脏读!!!

在B窗口中提交事务

commit;

在A窗口中再次查询:

*** 发现在一个事务中的多次查询结果是一致!!!(已经避免不可重复读)。

 

1.5.6演示串行化

·开启两个窗口A,B

设置A窗口的隔离级别:serializable

SET SESSION TRANSACTION ISOLATION LEVEL serializable;

分别在两个窗口中开启事务: 

start transaction;

在B窗口中插入一条记录

 

insert into account values (null,'小李',10000);

在A窗口中进行查询

 

select * from account;

***发现A窗口已经卡住了(说明事务不允许出现并发,A窗口需要等待B窗口事务执行完成以后,才会执行A窗口的事务。)当B窗口的事务结束(提交或者回滚),那么A窗口马上就会出现结果。

1.6事务的ACID特性

1.6.1 原子性

原子性:事务的不可分割,组成事务的各个逻辑单元不可分割。

1.6.2一致性

一致性:事务执行的前后,数据完整性保持一致。

1.6.3 隔离性

隔离性:事务执行不应该受到其他事务的干扰。

1.6.4 持久性

持久性:事务一旦结束,数据就持久化到数据库中。

2. mysql 表类型和存储引擎

2.1基本介绍

1.mysql的表类型由存储引擎(Storage Engines)决定,主要包括MyISAM,innoDB,Memory等。

2.mysql数据表主要支持六种类型,分别是CVS,Memory,ARCHIVE,MRG MYISAM,MYISAM,innoDB.

3.这六种又分为两类,一类是“事务安全型”比如:innoDB;其余都属于第二类,称为“非事务安全型”

2.2主要的存储引擎/表类型特点

 

2.3细节说明

我这里重点给大家介绍三种: MyISAM、InnoDB、MEMORY

 

2.3.1三种存储引擎表使用案例

-- 表类型和存储引擎
-- 查看所有的存储引擎
SHOW ENGINES 
-- innodb 存储引擎,是前面使用过.
-- 1. 支持事务 2. 支持外键 3. 支持行级锁 
-- myisam 存储引擎 
CREATE TABLE t28 (
    id INT, 
    `name` VARCHAR(32)) ENGINE MYISAM 
    -- 1. 添加速度快 2. 不支持外键和事务 3. 支持表级锁 
    START TRANSACTION;
    SAVEPOINT t1
    INSERT INTO t28 VALUES(1, 'jack');
    SELECT * FROM t28; 
    ROLLBACK TO t1 
    -- memory 存储引擎
    -- 1. 数据存储在内存中[关闭了 Mysql 服务,数据丢失, 但是表结构还在]
    -- 2. 执行速度很快(没有 IO 读写) 3. 默认支持索引(hash 表)
    CREATE TABLE t29 (
        id INT,
        `name` VARCHAR(32)) ENGINE MEMORY 
        DESC t29 
        INSERT INTO t29
        VALUES(1,'tom'), (2,'jack'), (3, 'hsp');
        SELECT * FROM t29 
        -- 指令修改存储引擎 
        ALTER TABLE `t29` ENGINE = INNODB

2.4如何选择表的存储引擎

 

2.5 修改存储引擎

alter table '表名' engine=存储引擎;

3.视图(view)

3.1视图的作用

三范式让表查询变得复杂,对于常用的数据查询,反复写复杂的查询语句十分不方便,因此可以创建一个虚拟的表(不存数据),这个虚拟表的数据来源于数据库中存在的其他表,虚拟表的数据来源就在定义时给定

3.2视图和基表的关系

 

3.3视图的基本使用

 

3.4视图的注意点

  1. 创建视图后,到数据库去看,对应视图只有一个视图结构文件(形式:视图名.frm)

  2. 视图的数据发生变化会影响的基表,基表的数据变化也会影响到视图

  3. 视图中可以在使用视图数据仍然来自于基表

3.5视图的优点

  1. 安全:一些数据有着重要的信息,有些字段是保密的,不能然客户看到。这是就可以创建一个视图,在这张表里面只保留一部分字段。这样用户就可以查询自己需要的字段,不能查看保密的字段。

  2. 性能:关系数据库的数据常常会分表存储,使用外键建立这些表之间的关系。这是数据库查询,通常会用到连接(join)。这样做不但麻烦,效率相对也比较低,如果建立有一个视图将相关的表和字段组合在一起,就可以避免使用join查询数据

灵活:如果系统中有一个旧的表,这张表由于设计的问题,即将被废弃。然而很多应用都基于这张表,不易修改。这是就可以建立一个视图,视图中的数据直接映射到新建的表。这样,就可以少做很多改动,也达到升级数据表的目的。

3.6视图的练习

-- 视图的课堂练习
-- 针对 emp ,dept , 和 salgrade 张三表.创建一个视图 emp_view03, 
-- 可以显示雇员编号,雇员名,雇员部门名称和 薪水级别[即使用三张表,构建一个视图]
/* 分析: 使用三表联合查询,得到结果 
将得到的结果,构建成视图 */ 
CREATE VIEW emp_view03 
AS 
SELECT empno, ename, dname, grade
FROM emp, dept, salgrade 
WHERE emp.deptno = dept.deptno AND 
(sal BETWEEN losal AND hisal) 

DESC emp_view03 
SELECT * FROM emp_view03 

4.MySQL用户管理

4.1概念:

MySQL中的用户,都存储在系统数据库mysql的usre表中host:允许登录的“位置”,localhost表示该用户只允许在本机登录,也可以指定ip地址,比如:192.168.0.1 

user:用户名

authentication_string:密码,是通过mysql的password()函数加密之后的密码

4.2创建用户

create user '用户名'@'允许登录的位置' identified by '密码'
-- 说明:创建用户,提示指定密码

4.3删除用户

drop user '用户名' @ '允许登录位置';

4.4用户修改密码

修改自己的密码:

set password = password('密码');

修改他人的密码:

set password for '用户名' @ '登录位置' =password('密码')

4.5mysql 中的权限

 

4.6给用户授权

 

4.7回收用户授权

基本语法:

revoke 权限列表 on 库.对象名 from '用户名'@'登录位置';

4.8权限生效指令

如果权限没有生效可以执行下列命令

flush privileges;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL--事务+存储引擎+表类型+视图+用户管理 的相关文章

  • 如何记录数据库代码以查看数据库对象之间的依赖关系? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想为我的宠物项目编写文档 我的 PostgreSQL 数据库中有 30 个表 近 50 个视图和大约 30 个函数 存储过程 我想看
  • INNER JOIN 后从多个表获取最大日期

    我有以下两个表 table 1 ID HOTEL ID NAME 1 100 xyz 2 101 pqr 3 102 abc table 2 ID BOOKING ID DEPARTURE DATE AMOUNT 1 1 2013 04 1
  • MySQL Workbench 忽略外键

    在处理 MySQL Workbench 中的 SQL 编辑器时 我偶然发现了一些奇怪的事情 其中 执行似乎忽略了外键约束 这是一个例子 create database testdb use testdb create table t1 te
  • 如何使用 AJAX/jQuery 显示打印内容?

    所以我试图理解整个 AJAX jQuery 的事情 现在 当我单独运行这个 PHP 脚本时 我必须等待并观察轮子旋转 直到循环完成然后加载 while row mysql fetch array res postcode to storm
  • php无法在docker-compose中连接到mysql

    这是我的 docker compose version 2 services nginx image nginx 1 11 8 alpine ports 8081 80 volumes code usr share nginx html h
  • 退出 PHP 脚本后终止或停止 MySQL 查询

    我在工作中运行一个统计服务器 由于运行的查询量很大 该服务器有时会变得非常慢 我们的营销团队使用它作为主要统计工具 团队中的某些人有时会在脚本结束之前退出脚本 通过关闭浏览器或选项卡 同时 SQL 查询继续执行 当有人关闭或离开 PHP 脚
  • 如何使用sql脚本更改列的属性

    如何使用 sql 脚本更改列的属性 这是我尝试过但出现错误的方法 ALTER TABLE dbo tblBiometricPattern COLUMN BiometricPatternID TINYINT NOT NULL IDENTITY
  • 通过Java从MySQL中获取大量记录

    有一个 MySQL 表 服务器上的用户 它有 28 行和 100 万条记录 也可能会增加 我想从这个表中获取所有行 对它们进行一些操作 然后将它们添加到 MongoDB 中 我知道通过简单的 从用户中选择 操作来检索这些记录将花费大量时间
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • Php mysql 30秒后执行任务

    如何让 mysql 查询命令在访问 php 站点 30 秒后执行 您可以对执行 mysql 查询的 php 脚本发出 AJAX 请求 在 js 中使用计时器
  • 在 MySQL 中执行触发器需要什么权限?

    我发现 MySQL 手册中对 DEFINER 的解释令人困惑 因此我不确定运行应用程序的 执行用户 需要什么权限 为了安全起见 我喜欢将 执行用户 限制为所需的最少权限 我知道触发器 存储过程的创建者需要超级权限 但是 执行用户 是否也需要
  • 在shell命令行中创建mysql触发器

    我需要在命令行中创建一个mysql触发器 这个sql在mysql控制台中运行良好 sql USE DB1 DROP TRIGGER IF EXISTS my trigger DELIMITER CREATE TRIGGER my trigg
  • R:ifelse 中的字符串列表

    我正在寻找与 MySQL 中的 where var in 语句类似的东西 我的代码如下 data lt data frame id 10001 10030 cc1 rep c a b c 10 attach data data new lt
  • 在 Laravel 中按数据透视表 create_at 排序

    在我的数据库中 我有以下表格 courses id 名称 创建时间 更新时间 students id 名称 创建时间 更新时间 课程 学生 id course id student id created at updated at 我正在尝
  • Hibernate saveOrUpdate 与更新与保存/持久

    我正在努力理解休眠方法之间的细微差别 saveOrUpdate update save persist 我知道网站上有一些类似的问题 Hibernate中不同的保存方式有什么区别 https stackoverflow com questi
  • 合并两个具有相同列名称的 MYSQL 表

    我有两张桌子 表一是计划时间 id edition time 1 1 9 23am 2 2 10 23am 表二为实际时间 id edition time 1 1 10 23am 2 2 11 23am 我想要的结果是 Caption Ed
  • 如何比较行内的重叠值?

    我似乎对这个 SQL 查询有问题 SELECT FROM appts WHERE timeStart gt timeStart AND timeEnd lt timeEnd AND dayappt boatdate 时间格式为军用时间 物流
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • VBScript:从 Scripting.Dictionary 中对项目进行排序

    我有下面的代码 它获取这样的数据 姓名 1 姓名 4 姓名 2 姓名 3 并像这样列出 是一个复选框 姓名 1 姓名 4 姓名 2 姓名 3
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码

随机推荐

  • ubuntu 18.04 RTX2080(ti) --- tensorflow-gpu + cuda9.0 + cudnn-9.0 (ubuntu 16.04, TITAN XP)

    0 下载display driver cuda和cudnn RTX2080 Display Driver cuda cudnn 版本对应关系 1 禁止系统默认的显卡驱动 打开系统黑名单 sudo gedit etc modprobe d b
  • C++11新特性,推荐使用emplace_back()替换push_back()的原因

    TOC c 11新加入了emplace back 用来替换push back 在平时我们习惯性的尾插用push back 去完成 但是如果是尾插临时对象的话 push back 需要先构造临时对象 再将这个对象拷贝到容器的末尾 而empla
  • mmsegmentation安装教程,简单易懂,必能成功

    一 安装anaconda 这个自己弄一路默认就行或者你想改个路径也行 无所谓 安装好之后打开anaconda prompt控制面板 换成清华源 pip config set global index url https pypi tuna
  • 数字IC后端设计技术全局观

    数字IC后端设计flow 不含DFT 数字IC后端设计工具 DC 用于逻辑综合 FM 用于形式验证 ICC 用于物理实现 PrimeTime 用于STA 步骤 或文件类型 简述 RTL Register Transfer Level v文件
  • mysql8.0收费价格,MySQl 8.0遇到的坑

    报错 Illuminate Database QueryException SQLSTATE HY000 1045 Access denied for user root localhost using password NO SQL cr
  • Trying to access array offset on value of type int

    问题描述 出现报错信息 先百度翻译 试图访问int类型值的数组偏移量 通过翻译得知 int型的数据被其他不能使用的类型使用了 个人理解 关于这块 php7 4升级之后会有这个bug 网上大多人是说 7 4 版本的向后不兼容更改 非数组的数组
  • valgrind Massif

    valgrind检查内存泄露 valgrind 程序 内存泄漏问题 我们有memcheck工具来检查 很爽 但是有时候memcheck工具查了没泄漏 程序一跑 内存还是狂飙 这又是什么问题 其实memcheck检查的内存泄漏只是狭义的内存泄
  • Docker——安装和启动

    一 环境准备 1 安装Linux虚拟机软件 VMware或VirtualBox 比VMware更小巧轻便且免费 此处安装VirtulaBox 2 安装Linux虚拟系统 在管理中选择导入虚拟电脑 记得选中重新初始化所有网卡的MAC地址 双击
  • Dynamics CRM 365 如何设置经典登录页面

    Don t be surprised If you don t see classic interface post your sign up for dynamics 365 Okay let s face it We are losin
  • 复选框check的选中、不选中设置以及判断是否选中

    复选框的设置 一 JavaScript判断是否选中checkbox框 二 JavaScript设置选中checkbox框 三 JavaScript移除选中checkbox框 四 使用jQuery判断是否选中checkbox框 五 使用jQu
  • 国密(1) - 私钥Key文件( PEM格式)编解码方法

    详细的PEM文件格式解析 PEM文件 是按照私钥的ASN 1的格式 RFC5208 5915 5480 进行DER编码后输出二进制串的基础上 再进行Base64的编码 也就是每6个bit为一组 生成一个ascii码字符 需要4组6个bit
  • 学习笔记59—收藏这7个在线配色神器,再也不愁配色灵感了

    在设计中配色方案是必要的 也是让设计师头疼的一个问题 所以 编辑专为大家整理了一波配色神器网站 不用下载任何应用程序 打开即用 不仅能快速的做出符合设计概念的颜色组合 且有很多样品供你确认的工具 设计新手们千万别错过了 一 Khroma h
  • 【macOS】Win通过VNC远程控制Macbook

    Win通过VNC远程控制Macbook 参考 https zhuanlan zhihu com p 74162964 仅局域网内可用 Macbook配置 进入 电脑设置 勾选两个选项 Windows配置 安装VNC Viewer https
  • openpyxl操作表格的基本用法

    创建文件 以及创建xlsx表格 from openpyxl import Workbook load workbook import os 创建excel文件 默认会有一个sheet命名的表 def create xlsx path nam
  • Beginng_Rust(译):借用和生命周期(第二十二章)

    在本章中 您将学习 借用 和 生命周期 的概念 哪些是关于借用的典型编程错误 即困扰系统软件 Rust严格语法如何使用借用检查器来防止此类典型错误 插入块的方式如何限制借用范围 为什么函数返回引用需要生命周期指示符 如何使用寿命指定符来表示
  • 应用层的原理

    目录 应用层协议原理 网络应用程序体系结构 客户 服务器 P2P 混合模式 UDP TCP 所有能产生网络流量的程序 应用层协议原理 网络应用程序体系结构 客户 服务器 P2P 混合模式 UDP TCP 可供应用程序使用的运输服务 因特网提
  • 解决liquibase.exception.LockException: Could not acquire change log lock. Currently locked by XXXX

    项目启动后报liquibase exception LockException Could not acquire change log lock 解决方案 执行下面语句 use job job为你的数据库 select from DATA
  • HTML5 history新特性pushState、replaceState

    DOM中的window对象通过window history方法提供了对浏览器历史记录的读取 让你可以在用户的访问记录中前进和后退 从HTML5开始 我们可以开始操作这个历史记录堆栈 1 History 使用back forward 和go
  • windows dll 装载过程

    windows dll 装载过程 2010 12 04 19 13 56 分类 Windows系统平台上 你可以将独立的程序模块创建为较小的DLL Dynamic Linkable Library 文件 并可对它们单独编译和测试 在运行时
  • MySQL--事务+存储引擎+表类型+视图+用户管理

    目录 1 事务 1 1 概念 1 2 回退事务 1 3提交事务 1 4事务细节注意点 1 5事务的隔离级别 1 5 1 介绍 1 5 2 解决这些安全性问题 1 5 3演示脏读 1 5 4避免脏读 演示不可重复发生 1 5 5 演示不可重复