【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 操作;
【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 明确地释放保留点;
【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)

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

对上述列表的分析(Analysis):
A1)此语句显示所有可用的校对,以及它们使用的字符集;
A2)许多校对会出现两次,一次区分大小写(_cs表示),一次不区分大小写(_ci 表示);
3)为了确定所用的字符集和校对,使用如下语句:

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

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

6)校对在对用order by 子句检索出来的数据排序时其重要作用。
看个荔枝)在 orde by子句中设置校对策略(t114)


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


【3】安全管理
【3.1】访问控制
1)MySQL 服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权;
2)访问控制:管理员需要给用户提供他们所需的访问权,这就是所谓的访问控制,管理访问控制需要创建和管理用户账号;
3)不要使用root:应该严肃对待 root登录的使用。仅在绝对需要时使用它。不应该在日常的MySQL 操作中使用 root;
【3.2】管理用户
1)MySQL用户账号和信息存储在 名为mysql 的MySQL 数据库表中(mysql数据库中有一个名为user的表,它包含所有账号);

【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;

【3.2.2】删除用户账号

【3.2.3】设置访问权限
1)在创建用户后,必须接着分配访问权限。新创建的用户没有访问权限,他们可以登录,但不能看到数据,不能执行任何数据库操作;
2)查看赋予账号的权限,使用 show grants for 
对上图的分析(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 ;
Attention)再次提醒,不管是 查看用户权限,还是设置用户权限,都需要加上 host,如 username@host;
4)撤销权限

5)grant 和 revoke 可以在几个层次上控制访问权限:
level1)整个服务器,使用 grant all 和 revoke all;
level2)整个数据库,使用 on database.*;
level3)特定的表,使用 on database.table;
level4)特定的列;
level5)特定的存储过程;
5.1)下表列出了可以授予或撤销的每个权限:


【3.2.4】更改口令
1)使用 set password语句;
2)新口令加密如下:

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 不允许对变长列进行索引;
Attention)
A1)使用引号:不管使用何种形式的串数据类型,串值都必须括在引号内;
A2)当数值不是数值类型时: 比如电话号码和邮政编码存储在数值字段中,但这是不可取的。如 邮政编码01234,则保存的将是数值1234,实际上丢失了一位数字;
【5.2】数值数据类型

Attention)
A1)有符号与无符号: 所有数值数据类型都可以有符号或无符号(除开bit 和 boolean);有符号数值列可以存储正或负的数据,无符号数值列只能存储正数。默认情况为有符号,如果需要,可以使用unsigned关键字,将使用无符号数据类型,这样将允许你存储两倍大小的值;
A2)不使用引号;
A3)存储货币数据类型:MySQL没有专门存储货币的数据类型,一般情况下使用 decimal(8,2);
【5.3】日期和时间数据类型

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

MySQL事务管理+安全管理+MySQL数据类型相关推荐

  1. mysql事务的管理方式_浅谈MySQL事务管理(基础)

    本篇文章给大家带来的内容是浅谈MySQL事务管理(基础),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.事务处理用来维护数据库等完整性,保证mysql操作要么成功,要么失败(myisa ...

  2. mysql事务管理及spring声明式事务中主动异常抛出使数据库回滚

    mysql事务管理及spring声明式事务中主动异常抛出使数据库回滚 参考文章: (1)mysql事务管理及spring声明式事务中主动异常抛出使数据库回滚 (2)https://www.cnblog ...

  3. 使用mysql事务管理_MySQL事务管理的介绍(附示例)

    原标题:MySQL事务管理的介绍(附示例) 事务处理用来维护数据库等完整性,保证mysql操作要么成功,要么失败(myisam不支持事务) 1.关键词 事务(transaction)指一组SQL语句; ...

  4. linux下mysql日志管理及mysql备份还原

    linux下mysql日志管理及mysql备份还原 1.SHOW GLOBAL VARIABLES LIKE '%log%';  显示所有日志相关的选项 2.错误日志:log_error和log_wa ...

  5. MySQL(08)——MySQL事务管理

    事务: 一组sql语句(insert.update.delete),全部成功整体才算成功,一个失败整体也算失败. mysql 的事务默认自动打开,自动提交. 一条sql就是一个事务,所以不需要 事务开 ...

  6. mysql事务管理(重)

    mysql事务的四大特性(ACID) 回滚事务(Rollback):只能回滚inset,update,delete操作,不能回滚select操作: 一个事务里面有多个操作 select * from ...

  7. spring配置mysql事务管理_Spring 数据库事务管理机制

    要点1 Spring事务管理方法编程式事务(TransactionTemplate.PlatformTransactionManager) 声明式事务(配置式.注解式) 2 Spring 注解 @Tr ...

  8. mysql 事务id_[转]MySQL 5.6 全局事务 ID(GTID)实现原理(一)

    http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html 在这篇文档里,我们可以知道全局事务 ID 的官方定义是: GTID = so ...

  9. php mysql事务实例_PHP + MySQL事务示例

    PHP + MySQL事务示例 我真的没有找到正在使用MySQL事务的PHP文件的正常示例. 你能告诉我一个简单的例子吗? 还有一个问题. 我已经做了很多编程,但没有使用交易. 我可以在header. ...

最新文章

  1. 博为峰Java技术题 ——JavaSE 类加载器Ⅰ
  2. 智联招聘python岗位_智联招聘的python岗位数据词云制作
  3. buuctf (misc)神秘龙卷风 [brainfuck密码,压缩包密码爆破]
  4. npm学习(二)之如何防止权限错误
  5. 仿VS窗体效果+outlookbar效果
  6. java根据系统时间拼凑文件名字
  7. 转:Mysql explain
  8. VS2008 SP1安装失败
  9. 常见的SQL面试题:经典50例
  10. 【加速 PyTorch 模型训练的 9 个技巧】
  11. 5.20——工作记录
  12. 【算法】布赖恩·克尼根算法——天才算法求二进制中1的个数
  13. python爬虫和医学数据_Python爬虫入门教程 24-100 微医挂号网医生数据抓取
  14. 关于犹太人培养小孩【转】
  15. GPU显存 - 深度学习中 GPU 和显存分析
  16. codeblocks关闭logsothers
  17. 洛谷_2495 [SDOI2011]消耗战(虚树)
  18. visio 2019如何绘制圆角矩形
  19. 格式塔心理学在UI设计中的运用
  20. 六西格玛黑带培训找哪家好?-优思学院

热门文章

  1. Pool construction UVA - 1515 最小割模型
  2. P2183 [国家集训队]礼物(扩展卢卡斯)
  3. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结
  4. 数论五之容斥——硬币购物,Gerald and Giant Chess,幸运数字,Sky Full of Stars,已经没有什么好害怕的了
  5. 周末狂欢赛3(跳格子,英雄联盟,排序问题)
  6. [2020.11.25NOIP模拟赛]出租车【dp】
  7. P5502-[JSOI2015]最大公约数【分治】
  8. P5431-[模板]乘法逆元2【递推】
  9. P4597-序列sequence【堆】
  10. 「LibreOJ NOIP Round #1」旅游路线