Mysql事务、索引及权限管理

一、事务

二、索引

三、权限管理

四、三大范式


一、事务

本质:要么一起成功,要么一起失败

例子:转账(必须同时成功,或同时失败)要是转账时断电了,没转出去钱没了,那太难受了。

事务原则:ACID

A (原子性):要么一起成功,要么一起失败(只有这两个动作)。

C (一致性):事务前后的数据完整性要保持一致,总金额不会增加或减少。

  • 100块无论转多少给谁,转出去和自己剩下的一定为100。

I (隔离性):多个用户之间对数据操作互不影响。

  • 隔离时导致的问题:
    • 脏读:一个事务读取到了另一个事务未提交的数据。
    • 不可重复读:一个事务读取某一行,多次读取的数据不一致。
    • 幻读:一个事务读取到了别的事务插入的数据,导致前后读取不一致。

D (持久性):根据事务是否提交来执行成功或失败,事务提交后不可逆。

  • 当事务成功时,无论是否断电,数据库重启后钱也不会恢复到原状(转账后的状态)。
  • 当事务失败时,无论是否断电,数据库重启后钱一定会恢复到原状(转账前的状态)。

-- 创建数据库
create database if not exists changeMoney default character set 'utf8' default collate utf8_general_ci;
-- 创建表
create table shop(
`id` bigint(20) not null auto_increment,
`name` varchar(40) not null,
`money` decimal(40) not null,
primary key(`id`)
)engine = INNODB default charset=utf8;

-- 事务
-- 关闭自动提交
set autocommit = 0;	
-- 开启事务
start transaction

update shop set money = money - 1000 where `name` = '张三';
update shop set money = money + 1000 where `name` = '李四';

--提交事务
commit;	
--回滚(恢复到未开启事务时)
rollback;	
-- (开启自动提交)
set autocommit = 1;	

事务提交过程:
在这里插入图片描述

二、索引

帮助mysql高效获取数据的数据结构。

索引在小数据量时用处不大,在大数据量时可以显著增加查询速度;

索引创建:create [索引] index 索引名(id_表名_字段名) on 表名(字段名);

索引:

  • 主键索引(primary key):唯一的标识,一张表只有一个主键。

  • 唯一索引(unique key):避免重复的列出现,可以重复,多个列都可以标识为唯一索引。

  • 常规索引(key/index):默认,可以通过key或index关键字来设置。

  • 全文索引(FullText):快速定位数据

影响:

  • 索引创建完成之后,查询速度变快,但插入和修 改速度变慢。

  • 表中数据越多,创建索引越慢。

索引原则:

  • 索引不是越多越好。
  • 不要对经常变动数据加索引。
  • 小数据量不要加索引。
  • 索引一般加在常用来查询的字段上。

推荐阅读:https://blog.codinglabs.org/articles/theory-of-mysql-index.html

三、权限管理

1、创建用户

create user 用户名 identified by 密码;

2、修改当前用户密码(MySQL8失效)

set password = password(密码);

3、修改指定用户密码

set password for 用户名 = password(密码);

4、重命名

rename user 就用户名 to 新用户名;

5、授权用户全部权限(授权的用户不能给其他用户授权)

grant all privileges on *.* to 用户名;

6、查询权限

show grants for 用户名;

show grants for root@localhost; (查询root权限)

7、root用户权限

grant all privileges on *.* to ‘root@localhost’ with grants option;

8、撤销权限

revoke all privileges on *.* from 用户名;

9、删除用户

drop user 用户名;

四、数据库备份

备份的原因:

  • 保证数据库数据不丢失
  • 数据转移

备份的方式:

  • 物理拷贝:进入mysql所在文件夹,将data文件拷贝。

  • windows:在windows命令行使用mysqldump进行导出。

    • 导出:mysqldump -h 主机 - u 用户名 -p 密码 数据库 [表1,表2,表3…] > 盘符:位置或名称。

在这里插入图片描述
在这里插入图片描述

  • 导入:

    • 1、先登录数据库,导入表需要进入数据库才能导入。
    • 2、source 盘符:/文件。**

在这里插入图片描述


四、三大范式

第一范式(1NF):

原子性,表的每一列只做一件事情。
在这里插入图片描述

第二范式(2NF):

满足第一范式,并且每张表只描述一件事情。
在这里插入图片描述

第三范式(3NF):

满足第一和第二范式,并且确保表的每一列数据都和主键直接相关,而不能间接相关。
在这里插入图片描述
图片来源:https://www.cnblogs.com/wsg25/p/9615100.html

规范数据库的设计:

关联数据库不得超过三张表。

  • 考虑商业化的需求和目标(成本、用户体验),数据库的性能更加重要。
  • 在规范性能的问题的时候,需要适当的考虑一下规范性。
  • 故意给某些表增加一些冗余字段,让多表查询变为单表查询。
  • 故意增加一些计算列(从大数据量变为小数据量的查询:索引)
发布了61 篇原创文章 · 获赞 0 · 访问量 2162

猜你喜欢

转载自blog.csdn.net/sabstarb/article/details/105104122