禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!

禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!


MySQL——维护和用户管理

事务处理

事务

先下个定义,对于一组 MySQL 语句就被称之为事务。那么我们在事务中经常会做很多的操作,但是我们并不能保证这些操作都会被正常执行,可能会有不可知的故障。就例如我希望创建一个空表,然后往其中填入数据,可是有可能在导入数据时出了错,最后得到了一个空表或者表中数据是残缺不全的。这种事情我们不愿意发生,而且也会造成数据碎片,而且 MySQL 是没有撤销操作的。
对于这种故障引发的问题,可以使用事务处理来解决。事务处理可以用来管理一个事务,可以保证一个事务的整体运行,而不会被某个故障而受影响,例如当你创建了一个受损的数据表,就可以用事务处理进行还原。我们需要使用下面的代码启用事务处理:

START TRANSACTION;

需要注意的是,并不是所有引擎都支持事物处理,常用 InnoDB 来支持这个功能,因此我们要先切换一下引擎。

ALTER TABLE table_name ENGINE = InnoDB;

自动提交

默认的 MySQL 语句的提交是自动提交,也就是所有的操作都会直接拿去更新表。我们可以用 SHOW 语句查看是否启用了这个功能。

show variables like 'autocommit';


OFF 表示关闭,ON 表示开启。当操作被自动提交时,事务处理将失去作用,可以把这个功能关掉。

SET autocommit = 0;

需要注意的是,自动提交是对于整个连接而言的,而不是对于服务器。

回滚

所谓回滚操作就是撤销指定的 SQL 语句的过程,这是一种可以将表还原到操作之前的操作,回退操作的语句为:ROLLBACK。回滚操作适用于 INSERT、UPDATE、DELETE 语句,不适用于 SELECT、CREATE、DROP 语句。
让我们调试下,首先调用已有的存储过程制造一些数据。

查看表,确认里面有数据。

启用事务处理。

然后把表中的数据全删了,并确认下有没删干净。

接下来进行回滚操作,发现数据被恢复到启用事务处理前的状态了。

提交

所谓提交就是将未储存的 SQL 语句结果写入表中的操作,也就是说这其中的所有语句都能正常执行时,才会对数据表进行更新。一般对于数据表,MySQL 语句会直接执行,在事务处理中需要用 COMMIT 进行提交才会执行。

在提交或回滚操作执行后,事务处理会被自动关闭

保留点

更为复杂的操作,可能在一段 MySQL 语句中需要执行这两个操作的地方很多。这个时候你就可以设置保留点来标记对那些部分进行事务处理,设置保留点操作如下:

SAVEPOINT point_name;

保留点的名同样需要唯一,然后回退时就可以只回退到保留点的位置。

ROLLBACK point_name;

一般来说,保留点的设置越多越好,这样处理故障的能力就会越强,性能也会更好。保留点会在事物处理结束后自动被释放,也可以手动释放。

RELRASE SAVEPOINT;

选用字符集

字符集

对于数据库的用户,可能使用英文或者中文,不同的语言需要用不同的字符集来存储。所谓字符集就是字母和符号的集合,MySQL 支持不同的字符集,编码指的是某个字符集成员的内部表示,校对指定了字符集如何比较。
查看可使用的字符集,可以使用 SHOW 语句查看可使用的字符集和校对顺序:

SHOW CHARACTER SET;
SHOW COLLATION;

前者查看字符集:

后者查看校对顺序:

字符集和校对顺序的设置

对数据库设置

在创建数据库时,可以设置默认的字符集和校对顺序。

SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collarion%';

对表设置

对表设置字符集,需要将信息跟在 CREATE 语句之后,如果没有指定就会使用默认的设置。

CREATE TABLE table_name
(
    ……
)
DEFAULT CHARACTER SET 'character%'
        COLLATION 'collarion%';

对列设置

如果要对列设置,需要在 CREATE 语句中指定。

CREATE TABLE table_name
(
    column_name VARCHAR(10) CHARACTER SET 'character%'
                         COLLATION 'collarion%';
)

检索时设置

如果在检索时需要使用某种校对顺序来排序,可以在 ORDER BY 语句后设置。

ORDER BY variable… COLLATION 'collarion%';

当然了,在 GROUP BY、HAVING、聚集函数和别名都可以指定校对顺序。

权限管理

当用户访问服务器时,我们需要对不同的用户设置不同的权限,例如我用户一拥有读写权限,而用户二只拥有读的权限。如果没有对权限进行限制,数据库将会被任意的用户随意的修改,例如“删库跑路”,将没有任何安全性可言。

创建和删除用户

查看用户名单

MySQL 用户的账号信息存储于 mysql 数据库中的 user 表中,可以用 SELECT 语句查看用户名单。

创建用户

使用 CREATE USER 命令可以创建一个用户账号,需要给出用户名和密码。

创建成功之后,就可以在 USER 表中看到。

当然也可以往表中插入行,但是保存用户信息的表是很重要的,直接插入的做法并不安全。

删除用户

使用 DROP USER 语句可以把用户删除。

更改数据

使用 RENAME USER 语句可以重命名。

使用 SET PASSWORD语句可以修改密码,其中密码必须拿去 Password() 函数进行加密。

访问权限

赋予权限

使用 SHOW GRANTS FOR 语句可以访问用户的权限,一般对于新创建的用户来说,没有任何权限,除了登录以外啥都做不了。

其中 “USAGE ON .” 就表示没有任何权限,为了设置权限需要使用 GRANT 语句来赋予。此时需要提供 3 个信息:赋予的权限、权限使用的数据库或表、用户名,语法框架为:

GRANT 权限名 ON 数据库和表名 TO 用户名;

例如我赋予用户在数据库中所有表使用 SELECT 的权限。

撤销权限

撤销权限是赋予权限的反操作,可以使用 REVOKE 语句实现。

权限列表

使用 SHOW 语句可以查看。

SHOW PRIVILEGES;

参考资料

《MySQL Crash Course》[英] Ben Forta 著,刘晓霞 钟鸣 译,人民邮电出版社

猜你喜欢

转载自www.cnblogs.com/linfangnan/p/12942993.html
今日推荐