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…

mysql修改表的字段_mysql修改表字段学习笔记

--修改表字段CREATE TABLE register (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR (10) DEFAULT NULL UNIQUE KEY,age tinyint UNSIGNED DEFAULT 18,regisTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP (),fund DOUBLE (9, 2) DEFAULT 1000000.00,tel CHAR (11) NOT NULL);--…

python 条件概率_使用Pymc3的条件概率

我的问题是如何使用PYMC3包来实现条件概率模型。在我有一组数据a_观察到&#xff0c;b棼u观察到&#xff0c;并且我想找出它们之间的关系。我怀疑a&#xff0c;b&#xff0c;c都是正态分布&#xff0c;b依赖于a&#xff0c;c依赖于a&#xff0c;b。我需要找到参数。在到目前为止…

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…

python给视频加背景音乐_python中加背景音乐如何操作

在python中加背景音乐的方法&#xff1a;1、导入pygame资源包&#xff1b;2、修改音乐的file路径&#xff1b;3、使用init()方法进行初始化&#xff1b;4、使用load()方法添加音乐文件&#xff1b;5、使用play()方法播放音乐流即可。下面的代码直接复制粘贴到自己的代码即可实现…

python能和wincc一起用_搬家第二天-41.Wincc V7.3 利用Inputbox和Msgbox做权限管理和二次确认设计...

有时候我们希望做某个操作时&#xff0c;有密码管理或者二次确认。密码管理可以通过用户管理方式设置权限&#xff0c;也可以通过弹窗输入密码的方式&#xff1b;二次确认主要是使用弹窗然后捕获用户点击的按钮编号来进行。下面通过一个简单的日子记录一下如何实现。一 准备工作…

mysql中的函数编程_MySQL

12.2. 控制流程函数CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END在第一个方案的返回结果中&#xff0c; valuecompare-v…

python画窗口_pyqt中图案如何画在子窗口上

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼基本思路是从QWidget派生出一个类重写paintEvent&#xff0c;在里面画图。UI部分代码是这样的class Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(1008, 693)self.widget QtWidgets…

twisted mysql_Twisted MySQL adbapi返回字典

有没有办法把adbapi查询的字典结果返回到MySQL&#xff1f;在[name: Bob, phone_number: 9123 4567]默认返回元组。在^{pr2}$对于简单的Python&MySQL&#xff0c;我们可以使用MySQLdb.cursors.dictcursors。但是如何与扭曲的adbapi一起使用呢UPD:我解决了&#xff0c;但我认…

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

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

java 生成bat_java实现生成windows可执行的批处理文件(.bat)

/*** 下载压缩包**paramid 商户id*paramrequest*paramresponse*returnvoid*authorchen.bing* Date 2019/11/4 17:35*/RequestMapping(value "downloadzip")public voiddownloadzip(String id, HttpServletRequest request, HttpServletResponse response) {if(String…

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 ip归属地查询_JAVA版IP地址查询调用示例

package cn.juhe;import net.sf.json.JSONObject;import org.springframework.web.client.RestTemplate;/*** ip地址查询Java版本demo*/public class IpDemo {//请求的接口地址public static final String REQUEST_URL "http://apis.juhe.cn/ip/ipNew?ip%s&key%s&q…

java 多个异常处理_Java 多个异常共享同一个异常处理器的方法

传统的异常处理我们先来看下&#xff0c;传统的异常处理方式&#xff1a;// not share exception handlerint[] intArray new int[3];try {for (int i 0; i < intArray.length; i) {intArray[i] i;System.out.println("intArray[" i "] " intArr…

java基础知识点_JAVA基础知识

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

java栈的应用_Java堆栈应用程序

我有一个Java问题&#xff0c;涉及阅读一个文本文件&#xff0c;并检查它是否正确地平衡了花括号&#xff0c;方括号和括号 - {&#xff0c;}&#xff0c;[&#xff0c;]&#xff0c;(和) ”。读取文件没有问题&#xff0c;但现在我应该使用名为DelimPos的数据成员来保存行和字…

Linux下导出MySQL为SQL文件_在linux命令下导出导入.sql文件的方法

本文讲述了在linux命令下导出导入.sql文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;一、导出数据库用mysqldump命令(注意mysql的安装路径&#xff0c;即此命令的路径)&#xff1a;1、导出数据和表结构&#xff1a;mysqldump -u用户名 -p密码 数据库名 >…