ZAQI

mysql> CREATE TABLE emploee (
    -> name CHAR(64) NOT NULL,
    -> email CHAR(64),
    -> password CHAR(64),
    -> PRIMARY KEY (email)
    -> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.01 sec)
#InnoDB,MyISAM
#两种类型有什么区别:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
#MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持,外键等高级数据库功能。
#ENGINE= InnoDB 修改表的引擎

#什么是事务表呢:

#事务表就是可以进行Transaction事务回滚操作, InnoDB是一种数据库存储引擎.他是事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。

#InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。

#什么是非事务表?

#Nontransactional Tables,非事务表,不支持事务的表,也就是使用MyISAM存储引擎的表。
#非事务表的特点是不支持回滚

mysql> CREATE TABLE log ( id INT AUTO_INCREMENT, email CHAR(64), message TEXT,
    -> status ENUM('FAIL','OK')DEFAULT 'FAIL',
    -> ts TIMESTAMP,
    -> PRIMARY KEY(id)
    -> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.00 sec)
#ENUM进行枚举
    -> delimiter $$
    -> CREATE TRIGGER tr_employee_insert_before BEFORE INSERT ON emploee
    -> FOR EACH ROW
    -> BEGIN
    -> INSERT INTO log(email,message)
    -> VALUES (NEW.email,CONCAT('Adding employee',NEW.name));
    -> SET @LAST_INSERT_ID = LAST_INSERT_ID();
    -> END $$

mysql> CREATE TRIGGER tr_employee_insert_after AFTER INSERT ON emploee
    -> FOR EACH ROW
    -> UPDATE log SET status = 'OK' WHERE id = @LAST_INSERT_ID;

 

 

mysql> SET @pass = PASSWORD('XYZZ');
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO emploee(name,email,password)
-> VALUES('chuck','chuck@163.com',@pass);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from emploee;
+-------+---------------+-------------------------------------------+
| name | email | password |
+-------+---------------+-------------------------------------------+
| chuck | chuck@163.com | *186290269C2BC1FE5ADC8244109A286B7910AC1A |
+-------+---------------+-------------------------------------------+
1 row in set (0.00 sec)

 

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> SET @pass = PASSWORD('xzy')
-> ;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO emploee(name,email,password)
-> VALUES('quan','quan.qq.com',@pass);
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> INSERT INTO log(email,message)
-> VALUES(‘zhi.qq.com’,'badbad');

mysql> COMMIT;

 

#START TRANSACTION==开启事务标志

#COMMIT: ====结束事务标志,不执行commit,事务并没有提交,若退出,事务回滚

#mysql事务支持的引擎是InnoDB

#默认情况下autocommit的值为1

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.00 sec)

mysql>

# 当autocommit为开启状态时,即使没有手动start transaction开启事务,mysql默认也会将用户的操作当做事务即时提交。

#当autocommit为ON的情况下,并且又手动开启了事务,那么mysql会把start transaction 与 commit之间的语句当做一次事务来处理,默认并不会帮用户提交需要手动提交,如果用户不提交便退出了,那么事务将回滚。

  

 

posted @ 2019-10-28 12:57  linux——quan  阅读(195)  评论(0编辑  收藏  举报