[toc] 一、事務transaction (一)什麼是事務 事務是指一組操作,要麼都執行成功,要麼都執行失敗 1. start transaction:開啟事務 2. commit:提交確認 3. rollback:回滾,撤銷 (二)事務的ACID特性 (1)原子性Atomicity 指不能再分的 ...
目錄
一、事務transaction
(一)什麼是事務
事務是指一組操作,要麼都執行成功,要麼都執行失敗
- start transaction:開啟事務
- commit:提交確認
- rollback:回滾,撤銷
# 語法
start transaction;
sql語句
commit/roll back;
# 1. 事務下的代碼在commit之後才會生效
# 2. 事務下的代碼rollback之後會失效
(二)事務的ACID特性
(1)原子性Atomicity
指不能再分的事務,要麼全部成功,要麼全部失敗
(2)一致性consistency
事務發生前和發生後,數據的總額依然匹配
(3)隔離性Isolation
某個事務的操作對其他事物不可見
(4)持久性Durability
當事務完成後,其影響應該保留下來,不能撤銷,不能通過“補償性事務”來抵消之前的影響
(二)存儲引擎engine
create table user(
id int auto_increment primary key,
name varchar(10))
)engine = InnoDB charset utf8;
(1)InnoDB
相當於保時捷引擎,MySQL5.5以上預設使用InnoDB引擎
- InnoDB支持事務
- InnoDB支持行鎖
(2)MyIsam
相當於奔奔引擎,淘汰的引擎
- MyIsma不支持事務
- MyIsam支持表鎖
二、視圖view
視圖是一個虛擬表,用來存儲查詢語句的結果,相當於把子查詢中的嵌套語句用一個變數存儲
(一)增加視圖
create view 視圖名 as SQL語句;
create view v1 as select * from user where name = 'wick';
# 使用
select * from v1;
當改變視圖中數據時,原始表中的數據也會跟著修改
(二)刪除視圖
drop view 視圖名;
三、觸發器trigger
使用觸發器可以定製用戶對錶進行增、刪、改操作時前後的行為,使其自動觸發
(一)創建觸發器
# 每次向表1新增數據前/後,也向表2張紅插入值
delimiter // # 更改分解符為//
create trigger 觸發器名
before/after
insert on 表名1 for each row
begin
insert into 表名2 (欄位) values (值);
end //
delimiter ; # 更改分解符為;
(二)查看和刪除觸發器
# 查看觸發器
show triggers\G
# 刪除觸發器
drop trigger 觸發器名
四、存儲過程procedure
存儲過程包含了一系列可執行的SQL語句,直接調用名字使用SQL語句,就像一個函數
(一)創建存儲過程
# 示例
delimiter //
create procedure p1()
begin
select * from user where id = 2;
end //
delimiter ;
# 調用
call p1();
(二)刪除存儲過程
drop proedure p1;
五、函數
MySQL內置函數
- char_length(str):返回字元串的長度
- concat(str1,str2):字元串拼接
- format(x,d):將x的值保留d為小數
- instr(str,substr):返回字元串str中子字元串的第一個出現位置
- lower(str):小寫
- upper(str):大寫
- ltrim(str):相當於lstrip,去除左邊空格
- rtrim(str):相當於rstrip,去除右邊空格
- repeat(str,count):返回一個str重覆count次的字元串
- replace(str,from_str,to_str):將str中的from_str替換成to_str
- reverse(str):反轉str
- left(str,len):返回str前len個字元
- right(str,len):返回str後len個字元
更多函數見http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/functions.html#encryption-functions
六、資料庫備份
# 語法
mysqldump -h 主機名 -u用戶名 -p密碼 資料庫名 [表名 表名];
# 1. 單庫備份
mysqldump -uroot -p123 db1 > db1.sql # 備份庫
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
# 2. 多庫備份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
# 3. 備份所有庫
mysqldump -uroot -p123 --all-databases > all.sql
# 4. 重新導入
source D:/test3.sql