网站简单布局图,关于网页设计的网站,骏域网络,杭州网站推广优化公司【0】README0.1#xff09;本文部分文字描述转自“MySQL 必知必会”#xff0c;旨在review“MySQL事务管理安全管理MySQL数据类型” 的基础知识#xff1b;【1】管理事务处理【1.1】事务处理1#xff09;并非所有引擎都支持事务管理#xff0c;MyISAM 不支持#xff0c;而… 【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】使用rollback1rollback用于回退or撤销事务2rollback只能在一个事务处理内使用在执行一条 start transaction 命令之后使用AttentionA1事务处理用来管理 insertupdate 和 delete 语句 A2你不能回退 select语句create 或 drop 操作 【1.2.2】使用commit1隐含提交一般的mysql语句都是直接针对数据库表执行和编写的这就是所谓的隐含提交即提交写或保存操作是自动进行的2但是在事务处理块中提交不会隐含地进行。为进行明确的提交使用commit语句如下所示start transaction;
delete from product where id1;
delete from product where id1;
commit;3隐含事务关闭当commit 或 rollback 语句执行后事务会自动关闭【1.2.3】使用保留点1intro 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 autocommit0;干货——为指示MySQL 不自动提交更改需要使用 set autocommit03 autocommit 标志决定是否自动提交更改不管有没有commitAttentionautocommit 标志是针对每个连接而不是服务器的 干货——autocommit 标志是针对每个连接而不是服务器的【2】全球化和本地化【2.1】字符集和校对顺序1在讨论多种语言和字符集时将遇到以下重要术语termst1字符集为字母和符号的集合 t2编码为某个字符集成员的内部表示 t3校对为规定字符如何比较的指令 2排序为什么重要 排序因为不是外界想象的那么容易。考虑 词APE apex 和 Apple。他们处于正确的排序顺序吗 这有赖于你是否想区分大小写。使用区分大小的校对顺序有一种排序方式不使用区分大小写的校对顺序有其他的排序方式这不仅仅影响排序还影响搜索Attention使用何种字符集和校对的决定在 数据库数据库和表级进行【2.2】使用字符集和校对顺序1查看字符集完整列表show character set2查看所支持校对的完整列表show collation对上述列表的分析AnalysisA1此语句显示所有可用的校对以及它们使用的字符集 A2许多校对会出现两次一次区分大小写_cs表示一次不区分大小写_ci 表示 3为了确定所用的字符集和校对使用如下语句4给表指定字符集和校对使用带子句的 create table5给列指定字符集和校对6校对在对用order by 子句检索出来的数据排序时其重要作用。看个荔枝在 orde by子句中设置校对策略(t114)7查看clientconnectiondatabasefilesystem等的字符集和校对【3】安全管理【3.1】访问控制1MySQL 服务器的安全基础是用户应该对他们需要的数据具有适当的访问权2访问控制管理员需要给用户提供他们所需的访问权这就是所谓的访问控制管理访问控制需要创建和管理用户账号3不要使用root应该严肃对待 root登录的使用。仅在绝对需要时使用它。不应该在日常的MySQL 操作中使用 root【3.2】管理用户1MySQL用户账号和信息存储在 名为mysql 的MySQL 数据库表中mysql数据库中有一个名为user的表它包含所有账号【3.2.1】创建用户账号1创建命令create user new_root identified by new_root;2指定散列口令identified by 指定的口令为 纯文本MySQL 将在保存到user表之前对其进行加密。为了作为散列值指定口令使用 identified by password3重命名用户账号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 pacosonlocalhost表明对数据库 testcorejava下面的所有表有select 和insert的权限 Attention用户定义为 userhost MySQL的权限用户名和主机名结合定义。如果不指定主机名则使用默认的主机名%3设置权限使用grant语句。grant要求至少给出如下 infoinfo1要授予的访问权限 info2被授予访问权限的数据库或表 info3用户名 3.1看个授予权限的荔枝grant select on testcorejava.* to user_name ;Attention再次提醒不管是 查看用户权限还是设置用户权限都需要加上 host如 usernamehost4撤销权限5grant 和 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】数据库维护1MySQL备份数据的方法methodsmethod1使用命令行实用程序 mysqldump 转储所有数据库内容到外部文件 method2可用命令行实用程序 mysqlhotcopy 从一个数据库复制所有数据并非所有数据库引擎都支持这个实用程序 method3可以使用MySQL 的 backup table 或 select into outfile 转储所有数据到某个外部文件。这两条语句都接收将要创建的文件系统名此系统文件必须不存在否则会出错 Attention首先刷新未写数据为了保证所有数据被写到磁盘包括索引数据可能需要在进行备份前使用 flush tables 语句【4.2】进行数据库维护1analyze table用来检查表键是否正确2check table 用来针对许多问题对表进行检查【4.3】诊断启动问题1服务器启动问题通常在对 MySQL 配置或服务器本身进行更改时出现2在排除系统启动问题时首先应该尽量用手动启动服务器。MySQL 服务器自身通过在命令行上执行 mysqld 启动3下面是mysqld 的几个重要optionso1-- help 显示帮助 o2--safe-mode装载减去某些最佳配置的服务器 o3--verbose显示全文本消息 o4 --version显示version 信息 然后退出 【4.4】 查看日志文件1MySQL主要的日志文件有以下几种typestype1错误日志它包含启动和关闭问题以及任意关键错误的细节。此日志通常名为 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】二进制数据类型 1intro 二进制数据类型可以存储任何数据甚至包括二进制信息如图像多媒体字处理文档等