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之间的语句当做一次事务来处理,默认并不会帮用户提交需要手动提交,如果用户不提交便退出了,那么事务将回滚。