// 监视地点table
// 监视事件 insert/update/delete
// after/before
// 触发事件 insert/update/delete
create trigger t1
after insert
on ord
for each row
begin
update goods XXX;
end;
create goods(
gid int ,
name varchar(20),
num smallint);
create table ord(
ord int,
gid int,
much smallint);
insert into goods values
(1,'cat',34),
(2,,'dog',50),
(3,'pig',21);
// 引用参数触发器
create TRIGGER t2
after insert
on ord
for each ROW
begin
update goods set num=num-new.much WHERE new.gid=gid;
END;
// ---------------------------------------
CREATE TRIGGER t4
BEFORE
update
on ord
for each row
begin
update goods set num = num+old.much -new.much where gid = old .gid;
end;
// ----------------------------------------
;Updating of NEW row is not allowed in after trigger
// 在new行插入之前就要改
// insert :new
// 原因:insert 之后,new行已经插入到表中,成为事实,改new已经晚了
create TRIGGER t5
BEFORE
insert
on ord
for each row
begin
DECLARE
rnum int ;
select num into rnum from goods where gid=new.gid;
if(new.much > rnum)
then set new.much=rnum;
end if;
update goods set num=num-new.much where gid=new.gid;
end;
// 过程:封装若干条语句,调用时这些封装体执行
// 函数:是有返回值的过程 过程没有返回值
// 若干条sql语句封装起来----过程 把此过程存储在数据库中--存储过程
create procedure procedureName()
begin
end;
// declare 变量名 变量类型 default 默认值
create p2()
begin
declare age int default 18;
declare height int default 180;
select concat('年龄是',age,'身高是',height);
end;
-- create PROCEDURE p3()
-- begin
-- declare age int default 18;
-- declare height int default 180;
-- set age:=age+20;
-- select concat('年龄是',age,'身高是',height);
-- end;
create procedure p4()
begin
declare height int default 180;
set age:=age+20;
select concat('年龄是',age,'身高是',height);
end;
// 存储过程传参
create procedure p5(width int,height int)
begin
if width>height then
select '你挺胖';
elseif width < height
select '你挺瘦';
else
select '你挺方';
end if;
end;
create procedure p6()
begin
declare total int default 0;
declare num int default 0;
while num < 100 do
set total:=total+num;
set num:=num+1;
end while;
select total;
end;
// 游标
create procedure p()
begin
declare row_gid int;
declare row_num int;
declare row_name varchar(20);
declare getgoods cursor for
select gid,num,name from goods;
open getgoods;
fetch getgoods into row_gid,row_num,row_name;
select row_gid,row_name;
fetch getgoods into row_gid,row_num,row_name;
select row_gid,row_name;
fetch getgoods into row_gid,row_num,row_name;
select row_gid,row_name;
close getgoods;
end;
// 循环游标
create procedure p14()
begin
declare row_gid int;
declare row_num int;
declare row_name varchar(20);
declare cnt int default 0;
declare i int default 0;
declare getgoods cursor for select gid,num,name from goods ;
open getgoods;
repeat
set i=i+1;
fetch getgoods into ...;
until i>=cnt end repeat;
end;
//mysql结束标志
create procedure p14()
begin
declare row_gid int;
declare row_num int;
declare row_name varchar(20);
declare cnt int default 0;
declare i int default 0;
declare have int default 1;
declare exit handler for NOT FOUND set have = 0;
// declare continue handler for NOT FOUND set have = 0;
//判断标志 最后一次执行repeat fetch->无数据->触发not found ->set have=0
// ->continue->继续执行(后面sql语句)->select row_num,row_gid,row_name->最后一行被取出两次
//用 declare exit handler for NOT FOUND set have = 0;替换
// continue 是触发后,后面语句继续执行
// exit是触发后,后面语句不再执行
// undo是触发后,后面语句不再执行 目前mysql不支持
declare getgoods cursor for select gid,num,name from goods ;
open getgoods;
repeat
fetch getgoods into row_gid,row_num,row_name;
until have=0 end repeat;//最后一条记录会出现两次
end;
// 游标循环读取正确逻辑
create procedure p16()
begin
declare row_gid int;
declare row_num int;
declare row_name varchar(20);
declare cnt int default 0;
declare i int default 0;
declare have int default 1;
declare getgoods cursor for select gid,num,name from goods ;
declare exit handler for NOT FOUND set have = 0;
open getgoods;
fetch getgoods into row_gid,row_num,row_name;
repeat
select row_gid,row_num,row_name;
fetch getgoods into row_gid,row_num,row_name;
until have=0 end repeat;
end;
//用户连接到mysql 并做各种查询
[用户]<!----->[服务器]
分为两个阶段:
1、你有无权连接上来
2、你有无权执行此操作(select、update等)
对于1 :服务器如何判断:
3个参数:
1、从哪儿来host
2、你是谁 user
3、密码多少 pwd
用户3个信息存储在mysql下的user表下
// 修改host域 使IP能连接
update user set host='192.168.1.101' where user = 'root';
flush privileges;// 刷新权限 flush privileges;
// 修改用户密码
update user set password=password('111111') where xxxx;
flush privileges;
// 新增一个用户
grant [权限1,权限2] on *.* to user@'host' identified by 'password';
常用权限 all,create,drop,insert,delete,update,select;
grant all on *.* to lisi@'192.168.1.%' identified by '111111'; //%通配
// 收回权限
revoke all on *.* form lisi@'192.168.1.%';
//针对某个库授权
grant all on test2.* to lisi@'192.168.1.%' ;
revoke all on test2.* from ...;
// 针对某个表授权
grant create,update,insert,select on test2.goods to lisi@...;
总结:
1、user表 看看让不让连
2、db级
3、tables_priv级
// 主从复制原理
1、主服务器配置binlog
2、从服务器配置relaylog
3、从服务器如何有权读取master的binlog?(binlog比较敏感)
授权 master要授予slave账号
4、从服务器用账号连接master
mysql部分总结
最新推荐文章于 2021-05-31 15:36:47 发布