实用数据库教程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. 数据库复制:主从服务器,从做备份

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