1. 程式人生 > >python的mysql操作(一)

python的mysql操作(一)

mysql事務MySQL 事務主要用於處理操作量大,複雜度高的資料。比如,你操作一個數據庫,公司的一個員工離職了,你要在資料庫中刪除他的資料,也要刪除該人員相關的,比如郵箱,個人資產等。這些資料庫操作語言就構成了一個事務。
在MySQL中只有使用了Innodb資料庫引擎的資料庫或表才支援事務,所以很多情況下我們都使用innodb引擎。
事務處理可以用來維護資料庫的完整性,保證成批的SQL語句要麼全部執行,要麼全部不執行。
一般來說,事務是必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
1、事務的原子性:一組事務,要麼成功;要麼撤回。
2、穩定性 : 有非法資料(外來鍵約束之類),事務撤回。
3、隔離性:事務獨立執行。一個事務處理後的結果,影響了其他事務,那麼其他事務會撤回。事務的100%隔離,需要犧牲速度。
4、可靠性:軟、硬體崩潰後,InnoDB資料表驅動會利用日誌檔案重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什麼時候吧事務儲存到日誌裡。
而mysql在預設的情況下,他是把每個select,insert,update,delete等做為一個事務的,登入mysql伺服器,進入mysql,執行以下命令:
mysql> show variables like 'auto%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | ON |
| automatic_sp_privileges | ON |
+--------------------------+-------+
4 rows in set (0.00 sec)
如上所示: 有一個引數autocommit就是自動提交的意思,每執行一個msyql的select,insert,update等操作,就會進行自動提交。
如果把改選項關閉,我們就可以每次執行完一次程式碼就需要進行手動提交,connect物件給我們提供了兩種辦法來操作提交資料。
d) mysql事務的方法
commit():提交當前事務,如果是支援事務的資料庫執行增刪改後沒有commit則資料庫預設回滾,白操作了
rollback():取消當前事務
下面我們來看個例子:
我們先建立一個員工表:
create table employees (
emp_no int not null auto_increment,
emp_name varchar(16) not null,
gender enum('M', 'F') not null,
hire_date date not null,
primary key (emp_no)
);
其中,emp_no為員工id,為主鍵且唯一
emp_name為:員工的名字
fender為:性別,只有M和F兩種選擇
hire_date為:僱傭的時間。
為了試驗的效果,我們插入幾條資料:
insert into employees(emp_no, emp_name, gender, hire_date) values(1001, 'lingjiang', 'M', '2015-04-01');
insert into employees(emp_no, emp_name, gender, hire_date) values(1002, 'xiang', 'M', '2015-04-01');
insert into employees(emp_no, emp_name, gender, hire_date) values(1003, 'shang', 'M', '2015-04-01');
mysql> select * from employees;
+--------+-----------+--------+------------+
| emp_no | emp_name | gender | hire_date |
+--------+-----------+--------+------------+
| 1001 | lingjiang | M | 2015-04-01 |
| 1002 | xiang | M | 2015-04-01 |
| 1003 | shang | M | 2015-04-01 |
+--------+-----------+--------+------------+
e) rows in set (0.00 sec)