mysql数据事务安全_MySQL事务管理+安全管理+MySQL数据类型

【0】README

0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL事务管理+安全管理+MySQL数据类型” 的基础知识;

【1】管理事务处理

【1.1】事务处理

1)并非所有引擎都支持事务管理,MyISAM 不支持,而InnoDB支持;

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

3)事务处理是一种机制:用来管理必须成批执行的MySQL 操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,他们或者作为整体执行,或者完全不执行。如果没有发生错误,则整组语句提交给数据库表;若发生了错误,则进行回退以恢复数据库到某个已知且安全的状态;

4)关于事务处理需要知道的几个术语(terms):

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

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

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

t4)保留点(savepoint):指事务处理中设置的临时占位符,你可以对它发布回退;

【1.2】控制事务处理

1)管理事务处理的关键在于 将SQL 语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退 ;

2)标识事务的开始: start transacation:

【1.2.1】使用rollback

1)rollback用于回退or撤销事务;

2)rollback只能在一个事务处理内使用,在执行一条 start transaction 命令之后使用;

Attention)

A1)事务处理用来管理 insert,update 和 delete 语句;

A2)你不能回退 select语句,create 或 drop 操作;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【1.2.2】使用commit

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

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

start transaction;

delete from product where id=1;

delete from product where id=1;

commit;

3)隐含事务关闭:当commit 或 rollback 语句执行后,事务会自动关闭;

【1.2.3】使用保留点

1)intro to 保留点:为了支持回退部分事务处理 ,必须能在事务处理块中合适的位置放置占位符,这些占位符就称为 保留点;

2)创建占位符:使用 savepoint p1;

3)看个荔枝

3.1)创建保留点: savepoint delete1;

3.2)回退到本例给出的保留点:rollback to delete1;

Attention)保留点在事务处理完(执行一条rollbaack 或 commit)后自动释放,也可以用 release savepoint 明确地释放保留点;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【1.2.4】更改默认的提交行为

1)默认的MySQL行为是自动提交所有更改,换句话说,任何时候你执行一条MySQL 语句,该语句实际上都是针对表执行的,而且所做的更改立即生效;

2)为指示MySQL 不自动提交更改,需要使用 set autocommit=0;(干货——为指示MySQL 不自动提交更改,需要使用 set autocommit=0)

3) autocommit 标志决定是否自动提交更改,不管有没有commit;

Attention)autocommit 标志是针对每个连接而不是服务器的;

(干货——autocommit 标志是针对每个连接而不是服务器的)

【2】全球化和本地化

【2.1】字符集和校对顺序

1)在讨论多种语言和字符集时,将遇到以下重要术语(terms)

t1)字符集:为字母和符号的集合;

t2)编码:为某个字符集成员的内部表示;

t3)校对:为规定字符如何比较的指令;

2)排序为什么重要? 排序因为不是外界想象的那么容易。考虑 词APE, apex 和 Apple。他们处于正确的排序顺序吗? 这有赖于你是否想区分大小写。使用区分大小的校对顺序有一种排序方式,不使用区分大小写的校对顺序有其他的排序方式;这不仅仅影响排序,还影响搜索;

Attention)使用何种字符集和校对的决定在 数据库,数据库和表级进行;

【2.2】使用字符集和校对顺序

1)查看字符集完整列表(show character set)

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

2)查看所支持校对的完整列表(show collation)

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

对上述列表的分析(Analysis):

A1)此语句显示所有可用的校对,以及它们使用的字符集;

A2)许多校对会出现两次,一次区分大小写(_cs表示),一次不区分大小写(_ci 表示);

3)为了确定所用的字符集和校对,使用如下语句:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

4)给表指定字符集和校对,使用带子句的 create table:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

5)给列指定字符集和校对:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

6)校对在对用order by 子句检索出来的数据排序时其重要作用。

看个荔枝)在 orde by子句中设置校对策略(t114)

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

7)查看client,connection,database,filesystem等的字符集和校对;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【3】安全管理

【3.1】访问控制

1)MySQL 服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权;

2)访问控制:管理员需要给用户提供他们所需的访问权,这就是所谓的访问控制,管理访问控制需要创建和管理用户账号;

3)不要使用root:应该严肃对待 root登录的使用。仅在绝对需要时使用它。不应该在日常的MySQL 操作中使用 root;

【3.2】管理用户

1)MySQL用户账号和信息存储在 名为mysql 的MySQL 数据库表中(mysql数据库中有一个名为user的表,它包含所有账号);

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【3.2.1】创建用户账号

1)创建命令:create user new_root identified by 'new_root';

2)指定散列口令:identified by 指定的口令为 纯文本,MySQL 将在保存到user表之前对其进行加密。为了作为散列值指定口令,使用 identified by password;

3)重命名用户账号:rename user new_root to new_root_copy;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【3.2.2】删除用户账号

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【3.2.3】设置访问权限

1)在创建用户后,必须接着分配访问权限。新创建的用户没有访问权限,他们可以登录,但不能看到数据,不能执行任何数据库操作;

2)查看赋予账号的权限,使用 show grants for

0818b9ca8b590ca3270a3433284dd417.png

对上图的分析(Analysis):

A1)第一行权限 usage on *.*:表示根本没有权限,所以此结果表示在任意数据库和任意表上对任何东西没有权限(第一行权限);

A2)第二行权限 GRANT SELECT, INSERT ON `testcorejava`.* TO 'pacoson'@'localhost':表明对数据库 testcorejava下面的所有表有select 和insert的权限;

Attention)用户定义为 user@host: MySQL的权限用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%;

3)设置权限,使用grant语句。grant要求至少给出如下 info:

info1)要授予的访问权限;

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

info3)用户名;

3.1)看个授予权限的荔枝:

grant select on testcorejava.* to user_name ;

0818b9ca8b590ca3270a3433284dd417.png

Attention)再次提醒,不管是 查看用户权限,还是设置用户权限,都需要加上 host,如 username@host;

4)撤销权限

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

5)grant 和 revoke 可以在几个层次上控制访问权限:

level1)整个服务器,使用 grant all 和 revoke all;

level2)整个数据库,使用 on database.*;

level3)特定的表,使用 on database.table;

level4)特定的列;

level5)特定的存储过程;

5.1)下表列出了可以授予或撤销的每个权限:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【3.2.4】更改口令

1)使用 set password语句;

2)新口令加密如下:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

3)用户登录

mysql -upacoson -hlocalhost -p

(干货——还是那句话,不要忘记host)

【4】数据库维护

1)MySQL备份数据的方法(methods)

method1)使用命令行实用程序 mysqldump 转储所有数据库内容到外部文件;

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

method3)可以使用MySQL 的 backup table 或 select into outfile 转储所有数据到某个外部文件。这两条语句都接收将要创建的文件系统名,此系统文件必须不存在,否则会出错;

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

【4.2】进行数据库维护

1)analyze table:用来检查表键是否正确;

2)check table :用来针对许多问题对表进行检查;

【4.3】诊断启动问题

1)服务器启动问题通常在对 MySQL 配置或服务器本身进行更改时出现;

2)在排除系统启动问题时,首先应该尽量用手动启动服务器。MySQL 服务器自身通过在命令行上执行 mysqld 启动;

3)下面是mysqld 的几个重要options:

o1)-- help :显示帮助;

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

o3)--verbose:显示全文本消息;

o4) --version:显示version 信息 然后退出;

【4.4】 查看日志文件

1)MySQL主要的日志文件有以下几种(types):

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

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

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

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

Attention)在使用日志时,可以用flush logs 命令来 刷新和重新开始所有日志文件;

【5】appendix-MySQL 数据类型

1)数据类型有以下目的(targets):

t1)数据类型允许限制可存储在列中的数据;(如数值数据类型只能接受数值)

t2)数据类型允许在内部更有效地存储数据。可以用一种比文本串更简洁的格式存储数值和日期时间值;

t3)数据类型允许变换排序顺序。如果所有数据都作为串处理,那么 1 位于10之前,而10位于2之前。作为数值数据类型,数值才能正确排序;

【5.1】串数据类型

1)最常用的数据类型是串数据类型。有两种串类型,分别是定长串 和 变长串;

1.1)定长串:定长串接收长度固定的字符串,其长度是在创建表时指定的,定长列不允许多于指定的字符数目;

1.2)变长串:变长串存储可变长度的文本;text属于变长串类型;

2)既然 变长类型那么灵活,为什么还要使用定长类型呢? 回答是性能。MySQL 处理定长列远比处理变长列快的多。而且MySQL 不允许对变长列进行索引;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

Attention)

A1)使用引号:不管使用何种形式的串数据类型,串值都必须括在引号内;

A2)当数值不是数值类型时:比如电话号码和邮政编码存储在数值字段中,但这是不可取的。如 邮政编码01234,则保存的将是数值1234,实际上丢失了一位数字;

【5.2】数值数据类型

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

Attention)

A1)有符号与无符号:所有数值数据类型都可以有符号或无符号(除开bit 和 boolean);有符号数值列可以存储正或负的数据,无符号数值列只能存储正数。默认情况为有符号,如果需要,可以使用unsigned关键字,将使用无符号数据类型,这样将允许你存储两倍大小的值;

A2)不使用引号;

A3)存储货币数据类型:MySQL没有专门存储货币的数据类型,一般情况下使用 decimal(8,2);

【5.3】日期和时间数据类型

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

【5.4】二进制数据类型

1)intro :二进制数据类型可以存储任何数据(甚至包括二进制信息),如图像,多媒体,字处理文档等;

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值