網絡編程(事務)

目錄python

事務

概念:mysql

通俗的說,事務指一組操做,要麼都執行成功,要麼都執行失敗sql

舉例:數據庫

銀行匯款
嚶嚶嚶卡上一千元
嘻嘻嘻卡上也是一千元
嚶嚶嚶給朋友轉帳
若是,網斷了,嚶嚶嚶錢已經扣除,而朋友的錢又沒加,啷個辦?

代碼:create table user(
    id int auto_increment primary       key,name varchar(12) not null       default '', salary int not null     default 0)charset='utf8';

    insert into user(name,salary)       values ('嚶嚶嚶',1000),('嘻嘻        嘻',1000)
    
使用事務:
    start transaction;
    sql語句 commit(無異常提               交)/rollback(有異常回滾);
    
start transaction;
update user set salary=900 where name='嚶嚶嚶';
select *from user;
update user set salary=1100 where name='嘻嘻嘻';
select *from user;
commit;(無異常 提交)
                 
                 
start transaction;
update user set salary=800 where name='嚶嚶嚶';
select *from user;
rollback;
select *from user;

##rollback回滾影響全部
##特性:
原子性(Atomicity):原子意外最小的粒子,既不能再分的事務,要麼執行所有,要麼所有取消;
一致性(Consistency):指事務發生前和發生後,數據的總額依然匹配;
隔離性(Isolation):簡單來講,某個事物的操做對其餘事務不可見的;
持久性(Durbility):當事務完成後,其影響應該保留下來,不能撤銷,只能經過‘補償性事務’來抵消以前的錯誤;

##存儲引擎:
InnoDB:舉例,保時捷引擎
MyIsam:舉例,五菱宏光引擎
建表時:
creat table user(id int auto_increment primary key,name carchar(12) not null default '',salary int not null default 0)engine=Innodb charset utf8;
mysql5.5以上默認使用InnoDB
兩個引擎區別:
1. Innodb 支持事務,支持行鎖
2. MyISAM  不支持事務,支持表鎖

視圖

增長視圖:服務器

create view 視圖 as SQL 語句;運維

刪除:dorp view v1;函數

觸發器:兩張表: 訂單表 庫存表 場景: 當我下一個訂單的時候, 訂單表中須要增長一個記錄, 同時庫存表中須要減1 這兩個操做是同時發生的, 而且前一個操做出發後一個操做使用方法:code

增長:delimiter// ...........delimiter;索引

查看:show triggers\G事務

刪除:drop trigger 觸發器名;

存儲過程:

建立:      
delimiter //   
create procedure p1()   
BEGIN      
select * from user where id=2;   
END //      
delimiter ;

函數:

CHAR_LENGTH(str)
返回值爲字符串str 的長度,長度的單位爲字符。一個多字節字符算做一個單字符。   對於一個包含五個二字節字符集, LENGTH()返回值爲 10, 而CHAR_LENGTH()的返回值爲5。

CONCAT(str1,str2,...)
字符串拼接   若有任何一個參數爲NULL ,則返回值爲 NULL。

FORMAT(X,D)
將數字X 的格式寫爲'#,###,###.##',以四捨五入的方式保留小數點後 D 位, 並將結果以字符串的形式返回。若  D 爲 0, 則返回結果不帶有小數點,或不含小數部分。   
例如
SELECT FORMAT(12332.1,4); 結果爲: '12,332.1000'

INSTR(str,substr)
返回字符串 str 中子字符串的第一個出現位置。

LEFT(str,len)
返回字符串str 從開始的len位置的子序列字符。

LOWER(str)   
變小寫

UPPER(str)   
變大寫

LTRIM(str)   
返回字符串 str ,其引導空格字符被刪除。

RTRIM(str)   
返回字符串 str ,結尾空格字符被刪去。

SUBSTRING(str,pos,len)   
獲取字符串子序列

LOCATE(substr,str,pos)   
獲取子序列索引位置

REPEAT(str,count)   
返回一個由重複的字符串str 組成的字符串,字符串str的數目等於count 。   
若 count <= 0,則返回一個空字符串。
若str 或 count 爲 NULL,則返回 NULL 。

REPLACE(str,from_str,to_str)   
返回字符串str 以及全部被字符串to_str替代的字符串from_str 。

REVERSE(str)   
返回字符串 str ,順序和字符順序相反。

RIGHT(str,len)   
從字符串str 開始,返回從後邊開始len個字符組成的子序列

備份

(運維方向)

數據庫的備份   
爲啥要備份?      
將重要的數據保存下來      
用法:      
#語法:      
# mysqldump -h 服務器 -u用戶名 -p密碼 數據庫名 表名,  表名,.... > aaa.sql      #示例:      
#單庫備份      
mysqldump -uroot -p123 db1 > db1.sql  mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql      #多庫備份      
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql      
#備份全部庫      
mysqldump -uroot -p123 --all-databases > all.sql   
從新導入:      
mysql> source D:/test3.sql;
相關文章
相關標籤/搜索