和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

MySQL(六)

管理事务处理

事物的四个特性:

Atomic: 一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作。

**Consistency: **一个事务在执行之前和执行之后,数据库都必须处于一致性状态。

**Isolation: ** 在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。

**During: **一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。

并非所有引擎都支持事务处理:MyISAM和InnoDB是两种最常用的引擎,而前者不支持明确的事务处理管理,后者支持。

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

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

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

**保留点(savepoint)**指事务处理中设置的临时占位符(placeholder),你可以对它发布回退(与回退整个事务处理不同)。

事务开始

START TRANSACTION

使用ROLLBACK

SELECT * FROM orderitems; --先查询数据,都在
START TRANSACTION;-- 开始事务
DELETE  FROM orderitems;--删除表中数据
SELECT * FROM orderitems;--查询是否删除
ROLLBACK;--回滚
SELECT * FROM orderitems;--删除的数据又重新出现

使用COMMIT

一般的MySQL语句都是直接针对数据库表执行和编写的,会自动提交,也叫做隐含提交。

SET AUTOCOMMIT = 0; -- 禁止自动提交

但是在事务处理中,提交不会隐含地进行,必须使用COMMIT语句进行明确的提交。

COMMIT可以保证:在SQL语句不出错时才真正执行操作,否则错误语句会被自动撤销。

当COMMIT或ROLLBACK执行后,事务会自动关闭。

使用保存点

只使用ROLLBACK和COMMIT的话明显不够人性化,一旦出错就会回滚到最开始的状态。

为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符,这些占位符被叫做保存点。

创建保存点

SAVEPOINT 保存点名;

shi’y使用保存点

ROLLBACK TO 保存点名;

字符集

字符集是字母和符号的集合;

编码是某个字符集成员的内部表示;

校对规定字符如何比较的指令。

通过SHOW CHARACTER SET;查看数据库可用的数据集。

安全管理

MySQL中用户信息都存储在mysql数据库中的user表中。可使用以下指令查看:

USE mysql;
CELECCT USER FROM USER;

创建用户

CREATE USER 用户名
IDENTIFIED BY '口令'

用户重命名

RENAME USER 原名 TO 新名

删除用户

DROP UESR 用户名;

设置权限

在设置权限时,要求账号用户必须存在,但涉及的对象却没有这个要求。

这样可以:给未来的表设置权限、某表被删除后再出现时对它的权限依然存在。

-- 授予权限
GRANT INSERT / DELETE / UPDATE / SELECT ON 数据库.表名 TO 用户名;
-- 授予多个权限可以简化
GRANT INSERT, ALTER,UPDATE ON 数据库名.表名 TO  用户名;

-- 取消权限
-- 被废除的权限必须存在
REVOKE INSERT / DELETE / UPDATE / SELECT ON 数据库.表名 FROM 用户名;

可授予、废除的权限如下:

更改密码

SET PASSWORD FRO 用户名 = PASSWORD('新密码');

数据库备份

由于数据库数据经常是打开的,所以不能使用一般的文件转存方法,不过有以下几种解决方法:

  1. 使用命令行实用程序mysqldump转储数据库所有内容。
  2. 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(MyISAM,Innodb支持)。
  3. 使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE转储所有数据到某个外部文件。

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

MySQL日志

  • 错误日志,位于Data目录下,通常命名时[主机名].err。
  • 查询日志,位于Data目录下,通常命名时[主机名].log。
  • 二进制日志。位于data目录下,通常命名为hostname-bin,它记录更新过数据(或者可能更新过数据)的所有语句。

性能

使用SHOW PROCESSLIST查看活动进程,并可以使用KILL+PID杀死进程(需要root)。

  • 一般来说,存储过程执行得比一条一条地执行其中的各条MySQL语句快。
posted @ 2021-07-08 10:16  klaus08  阅读(29)  评论(0编辑  收藏  举报