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 操作;

【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 : 二进制数据类型可以存储任何数据(甚至包括二进制信息),如图像,多媒体,字处理文档等;


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超音速 启动_从根本上讲超音速亚原子Enterprise Java

超音速 启动我创建了一个视频,其中我用Quarkus解释了“超音速亚原子Java”,这是现代Java应用程序的运行时。 无论您是刚开始涉足Enterprise Java领域,还是已经是一位经验丰富的Java EE / J2EE开发人员,本课程都将指导您如何在2020…

利用java求积分(定积分和无穷限积分)

【0】README0.1)本文部分文字描述转自或译自 https://en.wikipedia.org/wiki/Simpson%27s_rule和 https://en.wikipedia.org/wiki/Numerical_integration#Methods_for_one-dimensional_integrals;旨在利用java求积分;(定积分和无穷…

Java的三种代理模式

转载自 Java的三种代理模式1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的…

后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如

后台审核管理 ergo欢迎阅读有关Kogito倡议的博客系列的另一集,以及我们将Drools带入云的努力。 这些文章的目的是收集用户对我们提供给Kogito的功能的早期反馈。 在本文中,我们介绍了两种实现完整智能服务的新方法 : 独立的规则服务 集成智…

java转换文本文件到xlsx(自制缓冲区,无需先验文件行数)

【0】README0.1)本文代码利用了 Apache POI 框架 建立 java 到 xlsx 代码的联系;0.2)本文自制缓冲区从文本文件中读取数据读取,无需先验文件行数;0.3)本文通过缓冲区大小创建数组,数组容量自动增…

spring react_使用Spring WebFlux构建React性REST API –第3部分

spring react在上一篇文章的续篇中,我们将看到一个应用程序以公开React性REST API。 在此应用程序中,我们使用了 带有WebFlux的Spring Boot 具有响应式支持的Cassandra的Spring数据 卡桑德拉数据库 下面是应用程序的高级体系结构。 让我们看一下bui…

tomcat(12)org.apache.catalina.core.StandardContext源码剖析

【0】README0)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(12)StandardContext源码剖析” 的基础知识;1)Context实例表示一个具体的web 应用程序,其中包含一个或多个Wrapper实例,每个Wra…

jms面试题_最新的20多个JMS面试问答(2020)

jms面试题快速浏览JMS(Java消息服务)常见问题面试问题和答案。 2020年以来的最新问题已添加到列表中。 1.简介 在本教程中,我们将了解2020年经常问到的JMS面试问题。作为面试的一部分,如果您有6年以上的经验,就有机会…

tomcat(13)Host和Engine容器

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(13)Host和Engine容器” 的基础知识;0.2)Host容器:若你想在同一个tomcat部署 上运行多个Context 容器的话,就需要使用 Host 容…

spring react_使用Spring WebFlux构建React性REST API –第2部分

spring react在上一篇文章的续篇中,我们将看到React式流规范及其实现之一,称为Project Reactor 。 React流规范定义了以下接口。 让我们看看这些接口的细节。 发布者→发布者是潜在数量不受限制的序列元素的提供者,可按其订阅者的要求发布它…

tomcat(14)服务器组件和服务组件

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(14)服务器组件和服务组件” 的基础知识;0.2)for complete source code ,please visit https://github.com/pacosonTang/HowTomcatWorks/tree/maste…

组合模式的安全模式与透明模式

转载自 树形结构的处理——组合模式(四) 1 透明组合模式与安全组合模式 通过引入组合模式,Sunny公司设计的杀毒软件具有良好的可扩展性,在增加新的文件类型时,无须修改现有类库代码,只需增加一个新的文件类…

spring react_使用Spring WebFlux构建React性REST API –第1部分

spring react在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API。 在进入React式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及现代API的需求。 如果您查看从旧版系统到下文所述的现代系统的期望,…

tomcat(15)Digester库

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(15)Digester库” 的基础知识;2)problemsolution:2.1)problem:如下面的代码,Bootstrap类实例化连接器…

api restful_HATEOAS的RESTful服务。 记录超媒体API

api restful1.简介 希望本教程的前一部分不仅揭示了超媒体和HATEOAS的深远意义,而且使我们确信这些都是RESTful Web服务和API的基本构建模块。 在这一部分中,我们将继续侧重于文档方面,以解决如何预先传递Web服务或API功能的问题。 目录 1.…

模版方法模式

转载自 23种设计模式(6):模版方法模式定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。 类型:行为类模式 类图&#…

java并发编程实践(1)intro

【0】README0.1)本文部分文字描述转自“java并发编程实践”,旨在学习“java并发编程实践(1)intro”的相关知识;【3】线程带来的风险【3.1】安全性问题1)intro:在没有充足同步的case下,多个线程的操作执行顺…

读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例

读入的字节都写入字节数组中嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本文件或二进制文件。 一个示例是将文件的内容转换为String以显示。 不幸的是,…

迭代子模式

转载自 《JAVA与模式》之迭代子模式 在阎宏博士的《JAVA与模式》一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部…

java并发编程实践(2)线程安全性

【0】README 0.0)本文部分文字描述转自:“java并发编程实战”, 旨在学习“java并发编程实践(2)线程安全性” 的相关知识;0.1)几个术语(terms)t1)对象的状态:是指存储在状…