MySQL事务处理及字符集和校对顺序

1、事务处理

事务处理:是一种机制,管理必须成批执行的MySQL操做,以保证数据库不包含不完整的操做结果。用来维护数据库的完整性。数据库

利用事务处理,能够保证一组操做不会中途中止,或做为总体执行或彻底不执行(除非明确指示)。若是没有发生错误,整组语句写入数据库,如发生错误,则进行回退,以恢复数据库到某个已知且安全的状态。安全

事务处理的几个重要术语:服务器

·事务:一组SQL语句;函数

·回退:撤销指定SQL语句的过程;编码

·提交:将未存储的SQL语句结果写入数据库表;spa

·保留点:事务处理中设置的临时占位符,能够对它发布回退(与回退整个事务处理不一样);code

管理事务处理的关键:将SQL语句组分解为逻辑块,并明确规定数据什么时候应该回退,什么时候不该回退。blog

start transaction:标识事务的开始排序

 

1、使用rollback事务

rollback命令用来回退(撤销)MySQL语句,以下:

1 select * from ordertotals;
2 start transaction;
3 delete from ordertotals;
4 select * from ordertotals;
5 rollback;
6 select * from ordertotals;

解析:用rollback语句回退start transaction以后的全部语句,最后一条select语句显示该表不为空。

PS

rollback只能在一个事务处理内使用(在执行一条start transaction命令以后)。

事务处理用来管理select、insert和update语句;不能回退select语句(没意义);不能回退create或drop操做(即便事务中使用这两条语句,若是执行回退,它们也不会被撤销)。

 

2、使用commit

通常MySQL语句都是直接针对数据库表执行和编写,也就是隐含提交,即提交(写或保存)操做是自动的;但在事务处理块中,提交不会隐含地进行。为进行明确的提交, 使用commit语句,以下:

1 start transaction;
2 delete from orderitems where order_num = '20010';
3 delete from orders where order_num = '20010';
4 commit;

解析:从系统中彻底删除订单20010,涉及更新两个数据库表,因此使用事务处理块来保证订单不被部分删除。commit语句仅在不出错时写出更改。若是第一条delete起做用,但第二条失败,则delete不会提交(被自动撤销)。

PS当commit或rollback语句执行后,事务会自动关闭(未来的更改会隐含提交)。

 

3、使用保留点

复杂的事务处理可能须要部分提交或回退;

为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符,若是须要回退,能够回退到某个占位符,这些占位符称为保留点,为了建立占位符,可使用savepoint语句,好比:savepoint deletel;

解析:每一个保留点都取标识它的惟一名字,以便回退时MySQL知道要回退到何处。如为回退到本例给出的保留点,可使用:rollback to deletel;

PS保留点越多越好,这样能够更灵活的回退;保留点在事务处理完成后自动释放,或也能够用release savepoint明确的释放保留点。

 

4、更改默认提交行为

默认的MySQL行为是自动提交全部更改,即该SQL语句都是针对表执行的,并且当即生效;为指示MySQL不自动提交更改,可使用:set autocommit = 0;

autocommit标志决定是否自动提交更改,无论有没有commit语句;即设置autocommit=0(假)指示MySQL不自动提交更改(直到autocommit被设置为真为止)。

PSautocommit标志是针对每一个链接,而不是服务器。

 

2、字符集和校对顺序

数据库表被用来存储和检索数据,不一样的语言和字符集须要以不一样的方式存储和检索。所以MySQL须要适应不一样的字符集,适应不一样排序和检索数据的方法。

常见的术语:

·字符集:字母和符号的组合

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

·校对:为规定字符如何比较的指令

 

1、查看字符集

查看所支持的字符集完整列表,可使用:show character set;

这条语句显示全部可用的字符集以及每一个字符集的描述和默认校对。

为查看所支持校对的完整列表,可以使用:show collation;

此语句显示全部可用的校对,以及它们适用的字符集。

 

PS一般系统管理在安装时定义一个默认的字符集合校对,也可在建立数据库时,指定默认的字符集和校对;为了肯定所用字符集合校对,可以使用如下语句:

show variables like 'character%';

show cariables like 'collation%';

PS事实上,字符集不多是服务器范围(甚至数据库范围);不一样表甚至不一样列,均可能须要不一样字符集,并且二者均可以在建立表时指定。

 

2、指定字符集和校对

为了给表指定字符集和校对,可以使用以下语句:

1 create table mytable
2 (
3     columnn1     int,
4     columnn2     varchar(10)
5 ) default character set hebrew
6  collate hebrew_general_ci;

解析:建立一个包含两列的表,而且指定字符集和校对顺序。

 

MySQL默认使用的字符集和校对:

·若是指定character set和collate二者,则使用这些值;

·若是只指定character set,则使用此字符集及其默认的校对;

·若是既不指定character set,也不指定collate,则使用数据库默认。

 

PSMySQL容许对每一个列设置字符集和校对,例句以下:

1 create table mytable
2 (
3    columnn1    int,
4    columnn2    varchar(10),
5    columnn3    varchar(10) character set latin1 collate latin1_general_ci
6 ) default character set hebrew
7  collate hebrew_general_ci;

 

校对在对用order by子句检索出来的数据排序时起重要的做用,若是你须要用与建立表时不一样的校对顺序排序特定的select语句,能够在select语句自身中进行,好比:

1 select * from customers
2 order by lastname,firstname collate latinl_general_cs;

select使用collate指定一个备用的校对顺序(为区分大小写校对),这样将影响到结果排序的次序。COLLATE还能够用于GROUP BY、HAVING、汇集 函数、别名等。

PS若是绝对须要,串能够在字符集之间进行转换,使用cast()或 convert()函数。

相关文章
相关标签/搜索