實用數據庫教程mysql期末-3

1.mysql語言

1.1 分類
_]@VL[H1IL%OIIH{P@KBOBT.png
1.2 變量

1) 用戶變量

		set @name = "小明" ---初始化並賦值
		--在沒有ser關鍵字下,不能使用“=”作爲賦值 比如 @name2 = “王”這樣是錯誤的,因爲“=”會被解釋爲關係運算的相等。不帶set想用賦值使用“:=”,它作爲賦值運算符。
		select @t2 := (@t2:=5)+2 as t2;
		--顯示結果是t2是7
		--自己理解@符號的含義:取會話上用戶變量的值,當在程序塊中取局部變量,取值不同@
		

2) 系統變量

P2T(IGT@5%}9ITL9~FSUMP0.png

①一般取系統變量前要加兩個@@,有些特定值省略了@@,如current_user、current_time、current_timestamp
②設置系統變量
SET 【GLOBAL | SESSION]】| 【@@ global. | @@ session.】 系統變量 = 新值
eg.
設置全局變量

		set @@global.sort_buffer_size = 20000;

設置會話變量

		set @@session.sql_select_limit = 20;

③ 查看變量

show variables = show session variables
show global variables

3)局部變量

①聲明, 在begin end程序塊中, 必須使用declare 聲明,語法如下

declare 變量名【,變量名2....】 datatype 【default 值】

eg.

	 declare num int  default 0;
	 declare str1,str2 varchar(6); ---一下聲明兩個varchar變量

② 賦值
兩種賦值方法
1.set 變量名 = 表達式【,變量名 = 表達式…】
  set num = 1,str = ‘ccc’;
2.利用select 賦值
select 列名 into 變量名 from 表 where 條件;


2 過程式存儲對象

2.1 procedure 存儲過程

上幾個的例子

delimiter $$
create procedure delete_stu(int xh char(6))
begin
	delete from xs where xuehao = xh;
end$$

delimiter ;

 --- 根據不同參數返回 不同結果
delimiter $$
create procedure result1(in str varchar(4),out sex varchar(4))
begin
	case str
		when  'm' then set sex = '女';
		when  'f' then set sex = '男';
		else set sex = '無'/* case 第二種寫法
	case when ste = 'm' the set  sex = '女';
		 when ste = 'f' the set  sex = '男';
		 else set sex = '無';
	*/
	end case;
end$$
delimiter;

---循環
delimiter $$
create procedure whiletest()
begin 
	declare i int default 5;
	while i >0 do
		select i;
		set i = i -1;
	end while; 
end$$
delimiter;

--call 調用
call whiletest();
2.2 function 存儲函數

(1)與存儲過程區別:它沒有輸出參數,其本身就是輸出參數。不同call 來調用。他有return 語句,而procedure不允許有return。
(2) 創建

create function function_name(參數[,參數2,..])
return type
存儲函數主體begin    end$$ 此主體中必須含有return

eg.
create function counts_xs()
return integer
begin
	return (select count(*) from xs);
end $$

(3) 調用 使用select function_name(參數…);
select counts_xs();
(4)刪除
  drop function function_name;
查看: show function status;

2.3cursor 遊標

它是保存select返回的多條語句,jdbc中ResultSet類似。
遊標像局部變量一樣,使用前要提前聲明,而且它也只存在begin end 之中。
(1)聲明遊標(在所有局部變量聲明之後)
   declare cursor_name for cursor for select 語句
(2) 打開遊標 open cursor_name

(3) 讀取遊標 fetch cursor_name into 變量【,變量1,…】

(4) 關閉遊標 close cursor_name;

2.4 trigger 觸發器

(1)創建語法

create trigger	trigger_name 觸發時刻 觸發事件 on table_name 
for each row 觸發動作

觸發時刻:決定觸發器是在那個時刻觸發,在語句之前還是之後,after、before
觸發事件:insert、update、delete
each row:指觸發事件的每一行都會觸發觸發器動作,即行級觸發器
觸發動作:trigger被激活後,要執行的動作

(2)例子

delimiter $$
create trigger xs_del After Delete on xs for Each Row 
	begin
		delete from xs_ks where xuehao = xs.xuehao;
	end $$
delimiter;

---調用
delete from xs where xuehao = '2021122';
---驗證下xs_ks表是否也同一塊刪除
select * from xs_ks;
2.5 event 事件

(1) 事件是:在相應的時刻調用過程式數據庫對象。它可以週期性調用也可只調用一次。事件也稱 臨時性觸發器
(2)作用:關閉賬號、打開或關閉數據庫指示器、使數據在某個間隔後刷新、執行對數據庫的檢查工作
(3)創建語句

create event event_name on schedule 時間描述 Do sql語句;

時間描述:At  時間點【+ interval 時間間隔】
| every 時間間隔【starts 時間點【+interval 時間間隔】】
【ends 時間點【+interval 時間間隔】】

interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

(4)例子

---立即啓動的事件
create event direct on schedule at now() do....

---30s 後啓動
create event direct30 on schedule at now()+30 second do.....

--每月啓動一次,並開始於下一個月,結束於2020-12-31
create event startmonth on schedule every 1 month 
starts curdate + 1 month ends '2020-12-31'

(5)修改事件
alter event direcr rename to direct2;
drop event direct2;


3. Mysql備份與恢復

UKN]TQCZ[($NUCZC2%V2A2Y.png
  1. 數據庫備份:通過導出數據或複製表文件
    1.1 SQL語句備份與恢復: 只能導入導出數據,表結構無法備份
    1.1.1. 導出語句 select * from table_name outfile ‘d:/file/tb.txt’
select * from table_name outfile 'd:/file/tb.txt' 
fields terminated by ',' 
 optionally enclosed by  '"' 
 lines terminated by '?';
---導出後的格式是列字段用','分割,字符類型數據用’”‘雙引號包裹,行結束符是?

1.1.2 導入語句 load data infile ‘d:/file/tb.txt’ into table

 load data infile 'd:/file/tb.txt' into table table_name 
 fields terminated by ','  
 optionally enclosed by  '"' 
 lines terminated by '?';

1.2 客戶端工具
1.2.1 mysqldump
導出表的結構和數據,導出文件是.sql

Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]

備份多個表

>mysqldump -uroot -p123 databasename  tb1 tb2 >twotb.sql
---(默認在用戶目錄下,win是C:\Users\Administrator 不用分號)    

備份整個數據庫

>mysqldump -uroot -p123 --databases  mydatabase > D:/file/data.sql    

備份所有數據庫實例

mysqldump -uroot -p123 --all--databases >all.sql

恢復

mysqldump -uroot -p123 database_name<tb.sql

1.2.2 mysqlimport

		mysqlimport是通體load data infile語句實現,大部分參數與它相似。
		如恢復xscj庫中xs表, 
		mysqlimport -uroot -p123 --low-priority --replace xscj d:/file/xs.txt
  1. 二進制日誌文件:記錄並保存了更新數據的所有語句

    2.1 copy數據庫中對應磁盤二進制文件
    2.1.1 *.frm 表結構文件
    2.1.2 *.myd 數據文件
    2.1.3 *.myi 索引文件

    2.2 mysqlbinlog工具
    2.2.1 啓動日誌

    在my.ini中【mysqld】下添加log-bin或也可指定日誌文件目錄log-bin=path/文件名,若文件目錄沒有給出,默認文件名 是主機名 . 【注】使用mysqlbinlog 時,日誌必須在bin下,log-bin=c:/program/mysql5.7/bin/bin_log
    2.2.2 恢復
    mysqlbinlog bin_log002 | mysql -uroot =p123

  2. 數據庫複製:主從服務器,從做備份

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章