15. 管理事务处理
事务处理是一种保证数据库数据完整性的机制,想想这样的例子小呆想在数据库中添加新客户的订单
- 检索是否存在该订单
- 检索客户id
- 添加一行到orders表中,把它于客户id关联
- 检索orders表中赋予的新订单id
- 对于订购的物品在orderitems表中添加一行,通过表联结与orders表联结。
但是在执行过程中可能在第5步出错了,但是前4步都已经完成了,这个时候整个数据就是不完整了。所以需要有事务处理这样的机制,保证要么全部执行,要么就不执行。
15.1 事务处理的结构
事务处理的一般结构如下所示:
START TRANSACTION;
SAVEPOINT sp;
statement1;
IF condition1 THEN
ROLLBACK TO sp;
END IF;
statement2
IF condition2 THEN
ROLLBACK;
END IF;
COMMIT;
在事务处理中的控制语句如下:
- 开启事务:start transaction / begin
- 保留点:savepoint pointname
- 回退至保留点:rollback to pointname
- 全部回退:rollback;
- 提交:commit
- 注1:改变MySQL的自动提交模式:SET AUTOCOMMIT=0/1
- 注2:并不是所有引擎都支持事务处理,InnoDB支持事务。
15.2 范例:使用事务处理
To be continued.
16. 字符集和校对
字符集就是字母和符号的集合,校对是规定字符如何比较的规则。
可以使用下列语句来查看字符集及校对
SHOW CHARACTER SET;
SHOW COLLATION;
字符集及校对应该在创表的时候指定,不同列可以指定不同的字符集和校对,未指定则会使用默认值。
CREATE TABLE table1
(column1 int,
column2 varchar(10) CHARACTER SET latin1 COLLATE latin1_general_ci
...
)DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;