mysql执行语句后回退_MySQL命令学习笔记(八)

1 安全管理

1.1 访问控制

MySQL服务器的安全基础是: 用户应该对他们需要的数据具有适当的访问权,既不能多也不能少

1.2 管理用户

MySQL用户账号和信息存储在名为mysql的MySQL数据库中。获得所有用户账号列表时,可使用以下代码:

USE mysql;

SELECT user FROM user;

结果如下:

9903f303c50ea56a707a3c2bbaa6ace0.png

这里只有root一个账户。接下来开始创建账户。

1.2.1 创建用户账号

为了创建一个新用户账号,使用CREATE USER语句,如下所示:

CREATE USER ben IDENTIFIED BY '123456';

结果如下:

a32c056d513004eb4c7b3b90533e56b6.png

指定散列口令 IDENTIFIED BY指定的口令为纯文本, MySQL将在保存到user表之前对其进行加密。为了作为散列值指定口令,使用IDENTIFIED BY PASSWORD。

为重新命名一个用户账号,使用RENAME USER语句,如下所示:

RENAME USER ben TO jerry;

1.2.2 删除用户账号

为了删除一个用户账号(以及相关的权限),使用DROP USER语句,如下所示:

DROP USER jerry;

1.2.3 设置访问权限

为看到赋予用户账号的权限,使用SHOW GRANTS FOR,如下所示:

SHOW GRANTS FOR jerry;

为设置权限,使用GRANT语句,GTANT要求至少给出以下信息:

要授予的权限

被授予访问权限的数据库或表

用户名

GRANT的用法示例如下:

GRANT SELECT ON test.* TO jerry;

这里表示允许用户在test.*(test.*数据库的所有表)上使用SELECT,用户jerry对test数据库中的所有数据具有只读访问权限

结果如下:

957f8e25706a58377295a1a96827eccb.png

每个GRANT添加(或更新)用户的一个权限。 MySQL读取所有授权,并根据它们确定权限

GRANT的反操作为REVOKE,用它来撤销特定的权限。示例如下:

REVOKE SELECT ON test.* FROM jerry;

这条REVOKE语句取消刚赋予用户jerry的SELECT访问权限。 被撤销的访问权限必须存在,否则会出错,结果如下:

4b9cb08a786e19ef37ff601eb6222cc1.png

GRANT和REVOKE可在几个层次上控制访问权限:

整个服务器,使用GRANT ALL 和REVOKE ALL

整个数据库,使用ON database.*

特定的表,使用ON database.table

特定的列

特定的存储过程

1.2.4 更改口令

为了更改用户口令,可使用SET PASSWORD语句。新口令必须如下加密:

SET PASSWORD FOR jerry = PASSWORD('654321');

SET PASSWORD更新用户口令。新口令必须传递到Password()函数进行加密

2 管理事务处理

2.1 事务处理

事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

在使用事务和事务处理时,有几个关键词汇反复出现。下面是关于事务处理需要知道的几个术语:

事务(transaction)指一组SQL语句;

回退(rollback)指撤销指定SQL语句的过程

提交(commit)指将未存储的SQL语句结果写入数据库表

保留点(savepoint)指事务处理设置的临时占位符

2.2 控制事务处理

MySQL使用下面的语句来标识事务的开始:

START TRANSACTION;

2.2.1 使用ROLLBACK

MySQL的ROLLBACK命令用来回退(撤销) MySQL语句,示例如下:

SELECT * FROM table1;

START TRANSACTION;

DELETE FROM table1;

SELECT * FROM table1;

ROLLBACK

SELECT * FROM table1;

结果如下:

55efb4606eb681d5edfc1c7d069e71b4.png

上图是第一句SELECT执行的结果,然后依次执行上述语句如下:

f4e9fec1bc6d1f50d27e6e5e164514a7.png

首先执行一条SELECT以显示该表不为空。然后开始一个事务处理,用一条DELETE语句删除table1中的所有行。另一条SELECT语句验证ordertotals确实为空。这时用一条ROLLBACK语句回退START TRANSACTION之后的所有语句,最后一条SELECT语句显示该表不为空。ROLLBACK只能在一个事务处理内使用(在执行一条START TRANSACTION命令之后)。

哪些语句可以回退? 事务处理用来管理INSERT、 UPDATE和DELETE语句。你不能回退SELECT语句。(这样做也没有什么意义。)不能回退CREATE或DROP操作。

2.2.2 使用COMMIT

一般的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。

在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句,示例如下所示:

START TRANSACTION;

DELETE FROM table1 WHERE id = 1;

COMMIT;

最后的COMMIT语句仅在不出错时写出更改。

隐含事务关闭 当COMMIT或ROLLBACK语句执行后,事务会自 动关闭(将来的更改会隐含提交)。

2.2.3 使用保留点

简单的ROLLBACK和COMMIT语句就可以写入或撤销整个事务处理。但是,只是对简单的事务处理才能这样做,更复杂的事务处理可能需要部分提交或回退。

为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符。

这些占位符称为保留点。为了创建占位符,可如下使用SAVEPOINT语句:

SAVEPOINT delete1;

每个保留点都取标识它的唯一名字,以便在回退时, MySQL知道要回退到何处。为了回退到本例给出的保留点,可如下进行:

ROLLBACK TO delete1;

释放保留点 保留点在事务处理完成(执行一条ROLLBACK或COMMIT)后自动释放。自MySQL 5以来,也可以用RELEASE SAVEPOINT明确地释放保留点。

2.2.3 更改默认的提交行为

由于默认的MySQL行为是自动提交所有更改。换句话说,任何时候你执行一条MySQL语句,该语句实际上都是针对表执行的,而且所做的更改立即生效。为指示MySQL不自动提交更改,需要使用以下语句:

SET autocommit=0;

autocommit标志决定是否自动提交更改,不管有没有COMMIT语句。设置autocommit为0(假)指示MySQL不自动提交更改(直到autocommit被设置为真为止)。

3 数据库维护

3.1 备份数据

使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件

可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持这个实用程序)

可以使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE转储所有数据到某个外部文件。这两条语句都接受将要创建的系统文件名,此系统文件必须不存在,否则会出错。数据可以用RESTORE TABLE来复原

首先刷新未写数据 为了保证所有数据被写到磁盘(包括索引数据),可能需要在进行备份前使用FLUSH TABLES语句

3.2 进行数据库维护

MySQL提供了一系列的语句,可以(应该)用来保证数据库正确和正常运行,一些语句如下:

ANALYZE TABLE用来检查表键是否正确,示例如下:

ANALYZE TABLE table1;

ad43be0d03f8cffc5d38fc6d501b86b4.png

CHECK TABLE用来针对许多问题对表进行检查

ANALYZE TABLE table1;

若MyISAM表访问产生不正确和不一致的结果,可能需要用REPAIR TABLE来修复相应的表

若从一个表中删除大量数据,应该使用OPTIMIZE TABLE来回收所有的空间,从而优化表的性能

3.3 诊断启动问题

在排除系统启动问题时,首先应该尽量用手动启动服务器。 MySQL服务器自身通过在命令行上执行mysqld启动。下面是几个重要的mysqld命令行选项:

--help显示帮助——一个选项列表

--safe-mode装载减去某些最佳配置的服务器

verbose显示全文本消息

--version显示版本信息然后退出

3.4 查看日志文件

MySQL维护管理员依赖的一系列日志文件。主要的日志文件有以下几种:

错误日志。它包含启动和关闭问题以及任意关键错误的细节。此日志通常名为hostname.err,位于data目录中。此日志名可用–log-error命令行选项更改

查询日志。它记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,因此不应该长期使用它。此日志通常名为hostname.log,位于data目录中。此名字可以用–log命令行选项更改

二进制日志。它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录内。此名字可以用–log-bin命令行选项更改。

缓慢查询日志。此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为hostname-slow.log, 位 于 data 目 录 中 。 此 名 字 可 以 用–log-slow-queries命令行选项更改

4 改善性能

MySQL一个多用户多线程的DBMS,换言之,它经常同时执行多个任务。如果这些任务中的某一个执行缓慢,则所有请求都会执行缓慢。若遇到显著的性能不良,可使用SHOW PROCESSLIST

显示所有活动进程(以及它们的线程ID和执行时间)。还可以用KILL命令终结某个特定的进(使用这个命令需要作为管理员登录)。

有不止一种方法编写同一条SELECT语句。 应该试验联结、并、子查询等,找出最佳的方法。

使用EXPLAIN语句让MySQL解释它将如何执行一条SELECT语句。

决不要检索比需求还要多的数据。换言之,不要用SELECT *(除非你真正需要每个列)

在导入数据时,应该关闭自动提交。你可能还想删除索引(包括FULLTEXT索引),然后在导入完成后再重建它们

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql怎样dao出数据库_mysql怎么导出数据库?

mysql怎么导出数据库?下面本篇文章就来给大家介绍3种mysql导出数据库的方法,希望对你们有所帮助。mysql导出数据库的方法:方法一cmd 到mysql bin目录下用如下命令:mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-…

mac 安装mysql怎么卸载不干净_CleanMyMac卸载不干净怎么办?如何彻底删除Mac上的CleanMyMac?...

CleanMyMac for mac是非常受欢迎的系统清理、软件卸载软件,但是想要卸载CleanMyMac的有些用户发现不能完全卸载,那么CleanMyMac卸载不干净怎么办?如何彻底删除CleanMyMac?这里带来两种可以彻底删除CleanMyMac的方法,有…

mysql判断是否为null_MySQL如何判断字段是否为null

相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为什么not null的效率比null高 判断字段不为空的时候,到底要 select * from table where column <> 还是要用 select * from table w…

python如何导入自定义模块_【python】导入自定义模块

一、直接import1.当执行文件与要导入的py文件在同一目录下时假设要在wangyi.py中导入weibo.py文件import weibo2.当执行文件与要导入的py文件所在文件夹在同一目录下时假设要在wangyi.py中导入post packaging中的method.py(1)from post_packaging import method(2)from post_pa…

win 10 java 安装_win10---Java安装及环境变量配置

一、Java安装给出的下载地址已经是1.8.0及以上的版本&#xff0c;只需要进去根据操作系统位数选择所对应的包即可&#xff0c;我的是Windows x64&#xff0c;所以我选择的是第二个。注意⚠️&#xff1a;下载jdk时&#xff0c;需要登录Oracle账户&#xff0c;如果没有&#xff…

java 代码块的作用_4种Java代码块的作用讲解

4种Java代码块的作用讲解时间&#xff1a;2017-06-28 来源&#xff1a;华清远见JAVA学院今天华清Java学院小编要和大家分享的是Java代码块的作用&#xff0c;代码块是一种常见的代码形式&#xff0c;他用大括号“{&#xff5d;”将多行代码封装在一起&#xff0c;形成一个独…

java properties用法_java中Properties文件加载和使用方法

一.Properties简介Properties 类继承自HashTable&#xff0c;提供的方法很像Map的实现类HashMap。它在 Java 编程的早期就有了&#xff0c;并且几乎没有什么变化。J2SE 的 Tiger 版本增强了这个类&#xff0c;不仅可以用它在单独一行中指定用等号分隔的多个键-值对(其中键和值是…

java基础知识点_JAVA基础知识

1.注释&#xff0c;关键字&#xff0c;标识符1.注释(1)注释&#xff1a;解释说明程序的而文字。(2)注释的分类&#xff1a;单行注释 格式&#xff1a; //注释的文字多行注释 格式&#xff1a;/*注释的文字*/文档注释 格式&#xff1a;/**注释的文字*/(3)注释的作用&#xff1a;…

python无人机路径规划算法_RRT算法在Python中的实现,快速,拓展,随机,树

"""《基于智能优化与RRT算法的无人机任务规划方法研究》博士论文《基于改进人工势场法的路径规划算法研究》硕士论文"""import matplotlib.pyplot as pltimport randomimport mathimport copyshow_animation Trueclass Node(object):"&quo…

uc3842改可调电源教程_明纬开关电源改可调详细教程

1.拆除启动电阻&#xff0c;电路板是R12R59R58R9 四个150K的电阻。2.拆除原494供电&#xff0c;去掉J22一根跳线&#xff0c;12V辅助电源正极接J22到494一端&#xff0c;负极接地。3.去掉J15更换为20K电阻&#xff0c;同时拆掉变压器下面的ZD1过压保护&#xff0c;输出可达到50…

java webservice ip_通过Web Service实现IP地址查询功能的示例

实例01 实现一个简单的Web服务访问本实例将实现IP地址查询接口服务&#xff0c;根据用户传入的IP地址返回IP所在的省、市、地区&#xff0c;实例中将会用到IP地址库用于查询信息&#xff0c;由于数据较多&#xff0c;所以读者可在光盘资源文件中直接附加数据库文件&#xff0c;…

java五星好评点评器_亲,麻烦给个五星好评!—RatingBar

引言上一篇的CheckBox已经让大家越来越接近实战演练了&#xff0c;本章我们继续分享干货给大家&#xff0c;今天介绍一个实用的UI控件RatingBar(星级评分条)&#xff0c;对于使用过电商APP(某东&#xff0c;某宝等)的小伙伴们来说&#xff0c;应该不会陌生。在对商品进行评价时…

java激光推送ios_关于ios极光推送server端注意的地方

今天试用了极光推送API用它是因为&#xff0c;大多数人说它的文档是最全的&#xff0c;但是用过之后&#xff0c;发现关于IOS的文档&#xff0c;还是很不够&#xff0c;导致走了一点弯路&#xff01;特别是服务端的代码&#xff1a;https://github.com/jpush/jpush-api-java-cl…

日是这一年的等几天Java代码_java中计算指定日期是一年的第几天的方法

Java输入日期计算是这年的第几天&#xff1a;思路通过年份区分出是闰年还是平年&#xff0c;平年 2 月 28 天&#xff0c;闰年 2 月 29 天&#xff1b;1、3、5、7、8、10、12 月份 31 天其余月份均为 30 天&#xff1b;然后将每个月的天数相加即可&#xff0c;注意如果输入的是…

[2021-CVPR] Fine-grained Angular Contrastive Learning with Coarse Labels 论文简析

[2021-CVPR] Fine-grained Angular Contrastive Learning with Coarse Labels 论文简析 论文地址&#xff1a;https://arxiv.org/abs/2012.03515 代码地址&#xff1a;https://github.com/guybuk/ANCOR 首先通俗地介绍一下细粒度&#xff08;fine-grained&#xff09;&#…

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析

[2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析 论文链接&#xff1a;https://arxiv.org/abs/1911.11419 本文探索从自监督的角度进行美学评估。基于一个基本的动机&#xff1a;一个好的美学特征表示应该能够辨别出不同的…

java9 堆外内存_java堆外内存泄漏排查

当考虑Java中的内存泄漏时&#xff0c;我们通常会考虑Java堆泄漏&#xff0c;即在堆中分配的对象没有被垃圾收集。这是我在处理一台服务器内存泄漏时的想法&#xff0c;但我即将经历的远超出我的想象。症状&#xff1a;运行Vertx应用程序(没有交换分区)的生产服务器被Linux内存…

[2020-CVPR] Dynamic Region-Aware Convolution 论文简析

[2020-CVPR] Dynamic Region-Aware Convolution 论文简析 论文地址&#xff1a;https://arxiv.org/abs/2003.12243 参考代码地址&#xff08;非官方&#xff09;&#xff1a;https://github.com/shallowtoil/DRConv-PyTorch 代码笔者自己试了一下&#xff0c;应该是可以的&…

mmdetection 使用笔记 01: 安装与简单的推理demo

mmdetection 使用笔记 01: 安装与简单的推理demo mmdetection是来自商汤和港中文联合实验室openmmlab推出的目标检测工具包&#xff0c;与其同系列的还有基础视觉包mmcv&#xff0c;图像分类mmclassification&#xff0c;还有mmaction&#xff0c;mmaction2等等。 今天第一次…

php无限评论回复_php实现无限级评论功能_后端开发

php去除数组的键名的方法_后端开发在php中可以使用“array_values()”函数去除数组的键名&#xff0c;该函数返回包含数组中所有的值的数组&#xff0c;其语法是“array_values(array)”&#xff0c;其参数“array”表示规定的数组&#xff0c;返回值是包含数组中所有的值的数组…