数据库学习——05—Mysql高级(存储引擎、账户管理)

1、数据库的存储引擎
Mysql的体系结构

'''
Mysql的体系结构
第一层:网络连接层         客户端连接数据库
第二层:核心层,服务层 MySQL Server,查询缓存,存储过程,
第三层:存储引擎层(MyISAM、InnoDB等)            show engines;显示存储引擎的种类      show variables like '%storage_engine%';默认存储引擎的版本
第四层:系统文件层

mysql5.5之前的版本默认的存储引擎是MyISAM
MyISAM存储引擎表由MYD(数据文件)和MYI(索引文件)组成的        存储路径:G:\phpstudy\phpstudy_pro\Extensions\MySQL8.0.12\data\python@002d01

特点:不支持事务的应用(银行,订单系统不适用)      适合只读类型的应用
1、并发性(不好)和锁级别(表锁)
2、表损坏修复(会丢失数据) check table 表名称;#检查表数据         repair table 表名称;#修复表数据
3、MyISAM表支持数据压缩   linux:myisampack -b -f mylsam.MYI    压缩过后.old备份文件,.MYI文件就是压缩文件     (压缩完成后的表可以进行查询,不能写入数据)

mysql-锁
锁的作用是管理共享资源的并发访问
锁用于实现事务的隔离性

锁的类型
共享锁(也叫读锁),针对同一份数据,多个读操作可以同时进行而不会互相影响
独占锁(也叫写锁),当前写操作没有完成前,它会阻断其他写锁和读锁

'''

'''
MySQL引擎之Innodb(重要)
Innodb使用表空间进行数据存储

show variables like 'innodb_file_per_table';   # 显示表空间
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set, 1 warning (0.00 sec)

set global innodb_file_per_table=off;      # 关闭引擎innodb

innodb_file_per_table
ON:独立的表空间,tablename.ibd                       独立表空间可以同时向多个文件刷新数据    存储位置:G:\phpstudy\phpstudy_pro\Extensions\MySQL8.0.12\data
OFF:系统表空间:ibdataX      (X是一个数字)         系统表空间会产生IO瓶颈,刷新数据的时候是顺序进行的所以会产生文件的IO瓶颈

innodb存储引擎的特性:            对比MyISAM存储引擎
1、支持事务的ACID特性
2innodb支持行级锁,可以最大程度的支持并发   (行级锁:修改数据库数据的时候只会锁住当前修改的行,不会将整个表都锁住,区别于表级锁)


MyISAM和InnoDB的对比:
对比项                         MyISAM                                                          InnoDB
主外键                         不支持                                                            支持
事务                           不支持                                                            支持
行表锁          表锁,即使操作一条数据也会将整个表锁住,不适合高并发            行锁,操作时候只锁一行,不对其他的行有影响,适合高并发的操作
缓存                  只缓存索引,不缓存真实数据                                不仅缓存索引还缓存真实数据,对内存的要求较高,且内存大小对性能有决定性的影响
表空间                            小                                                              大
关注点                           性能                                                            事务

'''

'''
MySQL引擎之CSV                        适合作为数据交换的中间表,传给其他的表
数据是以文本的方式存储在文件中的
.CSV文件存储表内容
.CSM文件存储表的元数据,如表状态和数据量
.frm文件存储表结构信息

特点:不支持主键、自增、不允许为空
'''

'''
MySQL引擎之Memory   (内存)
也称为HEAP引擎,所以数据保存在内存中,如果MySQL服务重启数据会丢失,但是表结构会保存下来。

功能特点:
支持HASH索引(哈希索引)和BTree索引,HASH索引用在等值查找(查找条件是一个数值)BTree索引用在范围查找(betweenin)
所有字段都为固定长度varchar(10)=char(10)(不同于其他的引擎)
不支持BLOG和TEXT等大字段(内存空间有限)
'''

2、账户管理
在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作,主要的操作就是数据的crud(增删改查)
MySQL账户体系:根据账户所具有的权限的不同,MySQL的账户可以分为以下几种

  • 服务实例级账号:,启动了一个mysqld,即为一个数据库实例;如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库、连同这些库中的表
  • 数据库级别账号:对特定数据库执行增删改查的所有操作
  • 数据表级别账号:对特定表执行增删改查等所有操作
  • 字段级别的权限:对某些表的特定字段进行操作
  • 存储程序级别的账号:对存储程序进行增删改查的操作
    账户的操作主要包括创建账户、删除账户、修改密码、授权权限等

授予权限
需要使用实例级账户登录后操作,以root为例

主要操作包括:

  • 查看所有用户
  • 修改密码
  • 删除用户
  1. 查看所有用户
    所有用户及权限信息存储在mysql数据库的user表中
desc user;    --查看user表的结构

主要字段说明:

--Host表示允许访问的主机
--User表示用户名
--authentication_string表示密码,为加密后的值

查看所有用户
select host,user,authentication_string from user;
  1. 创建账户、授权
    需要使用实例级账户登录后操作,以root为例
    常用权限主要包括:create、alter、drop、insert、update、delete、select
    如果分配所有权限,可以使用all privileges

    2.1 创建账户&授权

grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';
   2.2 示例1

创建一个laowang的账号,密码为123456,只能通过本地访问, 并且只能对jd数据库中的所有表进行读操作
step1:使用root登录

mysql -uroot -p
--回车后写密码,然后回车

step2:创建账户并授予所有权限

grant select on jd.* to 'laowang'@'localhost' identified by '123456';

说明

  • 可以操作python数据库的所有表,方式为:jd.*

  • 访问主机通常使用 百分号% 表示此账户可以使用任何ip的主机登录访问此数据库

  • 访问主机可以设置成 localhost或具体的ip,表示只允许本机或特定主机访问

  • 查看用户有哪些权限: show grants for laowang@localhost;

step3:退出root的登录

quit

step4:使用laowang账户登录

mysql -ulaowang -p
--回车后写密码,然后回车

2.3 示例2
创建一个laoli的账号,密码为12345678,可以任意电脑进行链接访问, 并且对jd数据库中的所有表拥有所有权限

grant all privileges on jd.* to "laoli"@"%" identified by "12345678"
发布了50 篇原创文章 · 获赞 9 · 访问量 2090

猜你喜欢

转载自blog.csdn.net/weixin_42118531/article/details/103484328