/*
事务管理的原子性:
一致性:
一致性属性要保证如果从系统中删除一个员工,则所有和该员工相关的数据也要被删除
MYsql中,一致性主要由MYSQL的日志机制处理。
孤立性:
事务仅在自己的空间发生,孤立性保证了某个特定的食物在完全完成之前,其结果是看不见的
mysql使用页级锁定或者行级锁定来保证处理多个同时发生地事务安全,InnoDB表处理程序使用更好的行级锁定
持久性:
MySQL通过保存一条记录事务过程中系统变化的二进制事务日志文件来实现持久性
*/
/*
MySQL的InnoDB和BDB表类型生来就支持事务,也就是关于事务的命令只用于这两种表类型
MySQL中新表默认类型是MYISAM,
*/
CREATE TABLE table_name {field-definitions}TYPE = INNODB;
/*或者通过ALTER TABLE 命令修改表的类型 */
ALTER TABLE table_name TYPE = INNNODB;
/*MySQL提供了START TRANSACTION 命令来标记一个事务的开始
也可以使用BEGIN 或者BEGIN WORK 命令来初始化一个事务
*/
START TRANSACTION ;
/* 中间是SQL插入、删除、更新的语句
*/
ROLLBACK; --撤销所有的变化
COMMIT;--把整个事务保存在磁盘上
/*
事务在处理得过程中还没有保存在磁盘上,对于同一数据库的其他用户是不可见的。(但是可以设置孤立级)
*/
--MySQL使用了一个平面事务模型,第二个事务的开始时,自动提交第一事务
--下面MySQL命令运行时都会隐藏执行一个COMMIT命令
DROP DATABASE
DROP TABLE
CREATE INDEX
DROP INDEX
ALTER TABLE
RENAME TABLE
LOCK TABLES
UNLOCK TABLES
SET AUTOCOMMIT = 1;
/*控制事务行为
默认情况下,MySQL的SQL查询一旦被执行,就会自动向数据库提交结果。这就涉及到自动提交模式
也就是MySQL把每个查询语句作为一个事务来对待
当然,通过特定的AUTOCOMMIT变量进行修改,
*/
SET AUTOCOMMIT = 0 /*这样,表的更新将不会被保存,知道明确地发出一个COMMIT命令。
如果没有发布COMMIT,就终止了MySQL会话,数据库将自动执行ROLLBACK
*/
SET AUTOCOMMIT = 1 --MySQL将会自动发出一个COMMIT,同时保存所有开放的事务
/*事务孤立级
隔离在服务器上正在处理的不同的会话
*/
--四种孤立级
SERIALIZABLE(序列化)
REPEATABLE READ(可重复读)
READ COMMITTED (提交的读)
READ UNCOMMITTED(未提交的读)
--这些孤立级可以通过
TRANSACTION ISOLATION LEVEL
-- 变量来操作