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

来源:互联网 发布:舞蹈扇子淘宝网 编辑:程序博客网 时间:2024/05/17 01:29
【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 : 二进制数据类型可以存储任何数据(甚至包括二进制信息),如图像,多媒体,字处理文档等;


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝喜欢打人怎么办2岁 1岁宝宝动手打人怎么办 孩子总打人总哭怎么办 小孩出现夜惊家人怎么办 小孩不原跟家人沟通怎么办 孩子字写得难看怎么办 孩子上一年级不认识字怎么办 二年级孩子语文差怎么办 孩子二年级语文成绩差怎么办 孩子小学二年级语文差怎么办 二年级孩子语文理解能力差怎么办 深圳租房被坑了怎么办 小鸣单车押金退不了怎么办 联想台式一体机忘记密码怎么办 ps直线工具变成箭头了怎么办 笔记本图形处理速度慢怎么办 微信语音发不出去怎么办 ps里的图层锁定怎么办 ps图层丢失了怎么办 PS标题画面太小怎么办 轮胎蹭掉一块皮怎么办 吃香蕉吃的胃难受怎么办 qq糖卡在喉咙里怎么办 头发上粘到了qq糖怎么办 老房子土墙掉土怎么办 速写画的太慢怎么办 艺术生文化课没过线怎么办 5岁儿童坐飞机忘带证件怎么办 儿童坐飞机没带证件怎么办 儿童坐飞机没带户口本怎么办 儿童坐飞机没有带户口本怎么办 刚打蜡的车下雨怎么办 飞机票不能退票不能改签怎么办 深圳航空买机票姓名错了怎么办 大众cc打不着火怎么办 手上扎了仙人掌刺怎么办 pscs5界面字体太小怎么办 儿童做飞机没带户口本怎么办 黑户口想做飞机怎么办 宝宝坐飞机忘记带证件怎么办 值机柜台关闭了怎么办