深入了解MySQL创建用户,建库,四大数据引擎

前言

MySQL是广泛使用的关系型数据库管理系统,了解如何创建用户、建库以及选择合适的数据引擎对于数据库管理至关重要。本文将带您深入探索这些概念,并通过生活中的例子帮助您更好地理解。


目录

前言

创建用户

创建用户并设置登陆密码

修改密码

查看用户

host参数值说明:

删除用户

用户授权

参数说明:

用户撤权

示例1:取消用户的某些权限

示例2:取消用户的所有权限

总代码示例

四大数据引擎

MyISAM引擎

InnoDB引擎

Memory引擎

Archive引擎

四大数据引擎的简单对比:

什么是事务?

什么是并发?

什么是行级锁定

什么是表级锁定?


创建用户

MySQL 在安装时,会默认创建一个名为 root 的用户,该用户拥有超级权限,可以控制整个 MySQL 服务器。

创建用户并设置登陆密码

CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1';

修改密码

SET PASSWORD = PASSWORD ("rootpwd");


查看用户

#切换数据库
use mysql;
#查询用户信息
select host,user,authentication_string from user;

MySQL 5.7 版本不再使用 Password 来作为密码的字段,而改成了 authentication_string。

host参数值说明:

host列值含义
%匹配所有主机
localhostlocalhost不会被解析成IP地址,直接通过UNIXsocket连接
127.0.0.1会通过TCP/IP协议连接,并且只能在本机访问
::1::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1

删除用户

DROP USER <用户1> [ , <用户2> ]…

 注意:用户的删除不会影响他们之前所创建的表、索引或其他数据库对象,因为 MySQL 并不会记录是谁创建了这些对象。

用户授权

在 MySQL 中,拥有 GRANT 权限的用户才可以执行 GRANT 语句,其语法格式如下:

GRANT priv_type [(column_list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]

参数说明:

  • priv_type 参数表示权限类型;

  • columns_list 参数表示权限作用于哪些列上,省略该参数时,表示作用于整个表;

  • database.table 用于指定权限的级别;

  • user 参数表示用户账户,由用户名和主机名构成,格式是“'username'@'hostname'”;

  • IDENTIFIED BY 参数用来为用户设置密码;

  • password 参数是用户的新密码。

WITH 关键字后面带有一个或多个 with_option 参数。这个参数有 5 个选项,详细介绍如下:

  • GRANT OPTION:被授权的用户可以将这些权限赋予给别的用户;

  • MAX_QUERIES_PER_HOUR count:设置每个小时可以允许执行 count 次查询;

  • MAX_UPDATES_PER_HOUR count:设置每个小时可以允许执行 count 次更新;

  • MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立 count 个连接;

  • MAX_USER_CONNECTIONS count:设置单个用户可以同时具有的 count 个连接。

示例:

GRANT SELECT,INSERT ON *.* TO 'zking'@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;

用户撤权

示例1:取消用户的某些权限

REVOKE INSERT ON *.* FROM 'zking'@'localhost'

示例2:取消用户的所有权限

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'zking'@'localhost'

总代码示例

#命令:create user 用户名 identified by '密码';
create user test01;
ALTER USER 'test01'@'%' IDENTIFIED WITH mysql_native_password BY 'test01';

#MySQL8
select * from user;

#5.设置权限(Grant)
#语法:grant privileges on databasename.tablename to username@'host';
#给 zs用户 赋予 数据库db_xiaoli中的表t_p1_user 查询权限
grant SELECT on db_xiaoli.t_p1_user to zs@'%';
#给 zs用户 赋予 数据库db_xiaoli中的表t_p1_user 修改权限
grant UPDATE on db_xiaoli.t_p1_user to zs@'%';
#给 zs用户 赋予 数据库db_xiaoli中所有表 查询权限
grant SELECT on db_secondhandmarket.* to test01@'%';
#给 zs用户 赋予 数据库db_xiaoli中所有表 所有权限
grant ALL on db_crm.* to test01@'%';

6.撤销权限(Revoke)
#语法:revoke privileges on databasename.tablename from username@'host';
#啥也不能回收,不会对GRANT ALL PRIVILEGES ON `db_xiaoli`.* TO `zs`@`%`有任何影响
revoke DELETE on db_xiaoli.t_p1_user from zs@'%';
#可以回收GRANT SELECT, UPDATE ON `db_xiaoli`.`t_p1_user` TO `zs`@`%`这条权限语句
revoke all on db_xiaoli.t_p1_user from zs@'%';
#可以回收GRANT ALL PRIVILEGES ON `db_xiaoli`.* TO `zs`@`%`这条赋权语句带来的权限
revoke all on db_secondhandmarket.* from test01@'%';
#注:revoke只能回收grants列表中更小的权限;


“SELECT VERSION();” 
是一条SQL查询语句,用于获取当前MySQL数据库的版本信息。通过执行这条语句,可以返回MySQL数据库的版本号。请注意,作为一个AI语言模型,我无法直接访问数据库,因此无法提供实际的数据库版本信息。

四大数据引擎

MySQL支持多种数据引擎,每种引擎具有不同的特性和适用场景。以下是四大数据引擎及其使用场景的示例代码和解释:

MyISAM引擎

CREATE TABLE table_name (column1 datatype, column2 datatype) ENGINE=MyISAM;
  • 特点:MyISAM引擎是MySQL中默认的非事务性存储引擎。它以快速读取和查询为主要目标,并支持全文索引和压缩表格。
  • 适用场景:适用于读取频繁、查询频繁的场景,如Web应用日志记录和搜索引擎。

生活比喻:将MyISAM引擎比作一本图书的索引页。索引页提供了便捷的查找和排序功能,适用于需要频繁读取和查询数据的场景。

InnoDB引擎

CREATE TABLE table_name (column1 datatype, column2 datatype) ENGINE=InnoDB;
  • 特点:InnoDB引擎是MySQL中的事务性存储引擎,支持行级锁定、外键约束和崩溃恢复功能。它提供高并发性和可靠性。
  • 适用场景:适用于需要支持并发访问、事务处理和数据一致性的场景,如电子商务应用和财务系统。

生活比喻:将InnoDB引擎比作一座有强固结构和稳定性的大楼。它适用于需要支持大量并发访问或事务处理的场景,保证数据的一致性和可靠性

Memory引擎

CREATE TABLE table_name (column1 datatype, column2 datatype) ENGINE=Memory;
  • 特点:Memory引擎将数据存储在内存中,提供了快速读写操作的性能,但数据在服务器重启后将会丢失。
  • 适用场景:适用于需要快速读写、临时数据和缓存数据的场景,如会话管理和临时表格。

生活比喻:将Memory引擎比作一个临时的便条,用于快速记录和查找信息。它适用于需要快速读取和写入数据的场景,但数据在服务器重启后将会丢失。

Archive引擎

  • 特点:Archive引擎通过行级压缩和归档存储,提供了高度的数据压缩比。它适用于只需要偶尔查询数据的情况。
  • 适用场景:适用于数据存档和大量历史数据的存储,如日志记录和审计数据。
CREATE TABLE table_name (column1 datatype, column2 datatype) ENGINE=Archive;

生活比喻:将Archive引擎比作一个压缩文件夹,可以将数据进行压缩存储。它适用于需要在数据量很大的情况下进行存档和查询的场景。

四大数据引擎的简单对比:

  • MyISAM引擎适用于读取和查询频繁的场景,而InnoDB引擎适用于需要事务处理和并发访问的场景。
  • Memory引擎适用于快速读写和临时数据的存储,而Archive引擎适用于数据存档和数据压缩的场景。
  • MyISAM引擎和Memory引擎没有事务支持,而InnoDB引擎和Archive引擎支持事务处理。
  • InnoDB引擎支持行级锁定,可以更好地处理并发访问,而MyISAM引擎只支持表级锁定。

什么是事务?

在MySQL中,事务(Transaction)是指一组数据库操作语句的集合,这些语句要么全部执行成功,要么全部失败回滚。事务具有以下四个特性,通常缩写为ACID

  1. 原子性(Atomicity):事务的所有操作被视为一个不可分割的单位,要么全部成功提交,要么全部失败回滚。如果事务中的任何一个操作失败,整个事务将会回滚到最初状态,不会产生部分更新的情况。

  2. 一致性(Consistency):事务在执行前和执行后都必须保持数据库的一致性状态。这意味着事务的操作必须满足预定义的规则和约束,不会破坏数据库的完整性。

  3. 隔离性(Isolation):多个事务并发执行时,每个事务的操作都应该相互隔离,互不干扰。隔离性确保事务在并发执行时产生的结果与串行执行的结果一致,避免了并发问题如脏读、不可重复读和幻读。

  4. 持久性(Durability):一旦事务被提交,对数据库的改变就是永久性的,即使系统发生故障也不会丢失。数据库将确保持久性,保证事务提交后的数据持久地保存在数据库中。

非事务(Non-transaction)则是指单个数据库操作语句的执行,这些操作不需要满足事务的原子性、一致性、隔离性和持久性特性。


让我们用一个生活中的例子来解释这个概念:

假设你正在准备一次渡假旅行。你有一份待办清单,需要完成以下任务:预订机票、预订酒店、安排行程、购买旅行保险和准备行李。

现在,我们将这些任务分为两组:事务和非事务。

  1. 事务:

    • 预订机票:通过旅行代理或在线平台预订机票。这是一个事务,因为它是一个完整的操作单元,要么成功预订,要么失败(例如没有足够的座位)。
    • 预订酒店:通过在线预订平台预订酒店。这也是一个事务,要么成功预订,要么失败(例如没有可用的房间)。
  2. 非事务:

    • 安排行程:制定旅行计划,确定要参观的景点和活动。这是一个非事务,因为它是一个单独的任务,没有需要回滚的事务性操作。
    • 购买旅行保险:购买适当的旅行保险,以保护旅行期间的风险。这也是一个非事务,因为它是一个独立的操作,没有依赖其他操作的一致性要求。
    • 准备行李:整理和准备行李,确保有所有需要的物品。这同样是一个非事务,因为它是一个单独的任务,和其他任务没有直接的关联。

在这个例子中,你可以把预订机票和预订酒店作为一个事务来处理,以保证它们要么同时成功,要么同时失败。而安排行程、购买旅行保险和准备行李则是独立的非事务任务,它们没有事务特性的要求。

什么是并发?

并发是指两个或多个事件、任务或操作在同一时间段内同时进行或交替执行的能力。这是一种在计算机科学和现实生活中广泛应用的概念。以下是一个生活中的例子来说明并发:

假设有一个家庭成员正在煮饭并同时洗碗。在这个场景中,煮饭和洗碗是两个并发的任务。他们可以同时进行,而不需要等待一个任务完成才能开始另一个任务。

在这个例子中,煮饭的家庭成员将处理炉灶和食材,确保饭菜煮熟。同时,另一位家庭成员负责洗碗,清洗餐具和锅碗瓢盆。这两个任务可以在同一时间段内同时进行,互不干扰。

这里的并发展示了同时处理多个任务的能力,提高了家庭成员的效率。类似地,在计算机领域,这个概念也用于描述同时执行多个任务的能力,例如多线程编程、数据库事务和网络请求处理等。

什么是行级锁定

行级锁定是数据库中的一种锁定机制,它与表级锁定相反,它只锁定表中的某个具体行或记录,而不是整个表。

举个例子,考虑一个银行系统,其中有一个accounts表用于存储用户的账户信息。多个用户可以同时访问和修改这个表中的不同行,例如存款、取款或转账。

当一个用户对某个账户执行某个操作时,比如修改账户余额,银行系统可能会使用行级锁定来确保其他用户不能同时修改相同的行。这样做是为了避免并发冲突,例如两个用户尝试同时修改同一个账户的余额,导致数据不一致或丢失的问题。

在行级锁定期间,其他用户可能无法修改被锁定的行,直到锁定被释放。这样可以确保数据的一致性和完整性,并提高并发性能,因为其他用户可以同时访问和修改其他行。

总而言之,行级锁定是一种在数据库中锁定表中的某个具体行或记录的机制,用于避免并发冲突和确保数据的一致性。与表级锁定相比,行级锁定允许更高的并发操作,因为它只锁定需要修改的具体行,而不是整个表。

什么是表级锁定?

表级锁定是数据库中一种锁定机制,它指的是在并发访问数据库时,锁定整个表而不是表中的某个具体行或记录。

让我们以一个实际的例子来说明表级锁定的概念。假设有一个在线购物网站,多个用户可以同时浏览和购买商品。当一个用户对某个商品进行购买的时候,购物网站可能会使用表级锁定来确保其他用户不能同时修改该商品的库存。

在这种情况下,当一个用户开始购买某个商品时,购物网站会锁定整个商品库存表,阻止其他用户同时修改该表中的任何数据。这样做是为了避免出现并发冲突,例如两个用户尝试同时购买同一件商品,导致库存计算不正确或出现丢失数据的情况。

在表级锁定期间,其他用户可能无法修改表中的任何数据,直到锁定被释放。这种锁定机制可以确保数据的一致性和完整性,但同时也会降低并发性能,因为其他用户必须等待锁定释放才能执行自己的操作。

总而言之,表级锁定是一种在数据库中锁定整个表的机制,用于确保数据的一致性和完整性,但可能会对并发性能产生一定的影响。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值