修改隔離級別
修改全局的
set global transaction isolation level read committed;
或者:
set @@tx_isolation = "asasasasas-read";
修改局部
set session transaction isolation level read committed;
@@系統內置變量
@表示用戶自定義的變量
存儲過程
什么是存儲過程
是任意的sql語句的組合,被放到某一個存儲過程中,類似於一個函數,有一個函數名/參數/還有函數體.
用來干什么
其中可以包含任何的sql語句,邏輯處理,事務處理,所有的我們學過的sql語句都可以放到里面
三種數據處理方式
-
應用程序只關注業務邏輯,所有與數據相關的邏輯封裝到mysql中
- 優點:應用程序要處理的事情變少了,可以減少網絡傳輸
-
應用程序既要處理業務邏輯,還要編寫sql語句
- 優點:降低了溝通成本,人力成本
- 缺點: 網絡傳輸增加,sql語句編寫非常復雜
-
通過ORM框架, 使用對象關系映射,自動生成sql語句並執行
- 優點:不需要在編寫sql語句,提升了開發效率
- 缺點:不夠靈活,應用程序開發者和數據庫完全隔離,可能導致僅關注上層開發,而不清楚底層原理
# 語法
create procedure p_name(p_type p_name p_date_type)
begin
sql......
end
# p_type 參數的類型 in 輸入 out 輸出必須是一個變量,不能是值 inout 即可輸出也可輸入
# p_name 參數的名字
# p_data_type 參數的數據類型 如 int float
案例
delimiter |
create procedure a1(in a int, in b int, out c int)
begin
set c = a + b;
end |
delimiter ;
# 調用
set @res =0;
call a1(1,1,@res);
select * from @res;
# 刪除
drop procedure 名稱;
# 查看
show create procedure 名稱
# 查看全部 例如 db庫下的所有
select name from mysql.proc where db = 庫名 and type = "PROCEDURE";
delimiter |
create procedure transfer2(in aid int,in bid int,in m float,out res int)
begin
declare exit handler for sqlexception
begin
# 異常處理代碼
set res = 99;
rollback;
end;
start transaction;
update account set money = money - m where id = aid;
update account set money = moneys + m where id = bid;
commit;
set res = 1;
end|
delimiter ;
備份與恢復
# 備份
mysqldump.exe
mysqldump -u用戶名 -p密碼 數據庫 表名1 表名2 .... > 文件路徑....
# 注意 第一個表示數據庫 后面全都是表名
mysqldump -uroot -p day41 student >
#備份多個數據庫
mysqldump -uroot -p111 --databases day41 day40 > x3x.sql
#指定 --databases 后導出的文件包含 創建庫的語句 而上面的方式不包含
#備份所有數據
mysqldump -uroot -p111 --all-databases > all.sql
#自動備份
linux crontab 指令可以定時執行某一個指令
# 恢復數據:
沒有登錄mysql
mysql < 文件的路徑
已經登錄了MySQL
source 文件路徑
注意: 如果導出的sql中沒有包含選擇數據庫的語句 需要手動加上