mysql三種提交類型
有一段時間沒寫部落格,剛看到mysql的提交類型的知識點,寫個小demon記錄下。
mysql提交分顯式提交、隱式提交及自動提交。
(1) 顯式提交
用COMMIT命令直接完成的提交為顯式提交。其格式為:
SQL>COMMIT;
(2) 隱式提交
用SQL命令間接完成的提交為隱式提交。這些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
(3) 自動提交
若把AUTOCOMMIT設置為ON,則在插入、修改、刪除語句執行後,
系統將自動進行提交,這就是自動提交。其格式為:
SQL>SET AUTOCOMMIT ON;
隱式提交應用舉例如下:
#表結構 mysql> show create table planet_user_blacklist\G; *************************** 1. row *************************** Table: planet_user_blacklist Create Table: CREATE TABLE `planet_user_blacklist` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用戶id', `created_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '創建時間', `updated_at` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新時間', `add_type` tinyint(1) unsigned DEFAULT '0' COMMENT '0系統添加,1手動錄入', PRIMARY KEY (`id`), UNIQUE KEY `uq_uid` (`uid`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='用戶黑名單' 1 row in set (0.00 sec) #自動提交已被關閉 mysql> show variables like 'autocommit';; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | OFF | +---------------+-------+ 1 row in set (0.00 sec) ERROR: No query specified #測試開始 mysql> select * from planet_user_blacklist; +----+----------+------------+------------+------------+ | id | uid | created_at | updated_at | add_type | +----+----------+------------+------------+-----------+ | 1 | 29904034 | 1 | 2 | 0 | | 2 | 2839939 | 2 | 2 | 0 | +----+----------+------------+------------+----------+ 2 rows in set (0.00 sec) #開啟事務 mysql> begin; Query OK, 0 rows affected (0.00 sec) #新增欄位 mysql> alter table planet_user_blacklist add column address varchar(100) default ''; Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> update planet_user_blacklist set address = '廣州市番禺區番禺廣場' where id = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from planet_user_blacklist; +----+----------+------------+------------+----------+--------------------------------+ | id | uid | created_at | updated_at | add_type | address | +----+----------+------------+------------+----------+--------------------------------+ | 1 | 29904034 | 1 | 2 | 0 | 廣州市番禺區番禺廣場 | | 2 | 2839939 | 2 | 2 | 0 | | +----+----------+------------+------------+----------+--------------------------------+ 2 rows in set (0.00 sec) mysql> rollback; Query OK, 0 rows affected (0.00 sec)
#可見事物回滾新增欄位仍然被保留 mysql> select * from planet_user_blacklist; +----+----------+------------+------------+----------+---------+ | id | uid | created_at | updated_at | add_type | address | +----+----------+------------+------------+----------+---------+ | 1 | 29904034 | 1 | 2 | 0 | | | 2 | 2839939 | 2 | 2 | 0 | | +----+----------+------------+------------+----------+---------+ 2 rows in set (0.00 sec) mysql>