MySQL--4其他

                                               事务

1.4个特性

原子性,即要么泡妞成功,要么泡妞不成功,绝对不能出现暧昧不清的情况
一致性,即如果对方对你好,你就不能耍脾气,也要对对方好,状态要保持一致
隔离性,谈恋爱期间钱归钱,爱归爱,两者不能混淆,爱不应收到穷富的干扰
持久性,恋爱成功后,婚姻应该是一辈子的,是永久性的,海枯石烂至死不渝

2.设置手动提交

set autocommit=false;

3.回滚数据

rollback;

4.提交数据

commit;

5.回滚点

savepoint aaa;
rollback to aaa;


6.ddl语句会自动提交

create ,drop ,alter

                                                 多表连接

1.交叉连接
select * from emp cross join dept;

2.内连接
select * from emp inner join dept on emp.deptid=dept.deptid;

select empname, deptlocation from emp inner join dept on emp.deptid=dept.deptid where empname='aaa';

3.自然连接

select * from emp natural join dept;

4.左外连接
select * from emp left join dept on emp.deptid=dept.deptid;
5.右外连接
select * from emp right join dept on emp.deptid=dept.deptid;

6.全外连接
 select * from emp full  join dept;  同交叉连接

7.自连接 在同一座城市的不同部门
 select * from dept d1,dept d2 where d1.deptlocation=d2.deptlocation and d1.deptid<>d2.deptid;

                                            子查询

1.查找aaa所在部门名称

select empname,deptname from emp inner join dept on emp.deptid=dept.deptid where empname='aaa';

select deptname from dept where deptid=(select deptid from emp where empname='aaa');
2.查找拥有工资5000元以上员工的部门名称及所在地

select deptname,deptlocation from dept where deptid in(select deptid from emp  group by deptid having max(salary)>5000);

3.查找3号部门工资最高的人的名字


 1.查3号部门的最高工资

 2.查拥有这个工资的人


select empname from emp where salary=(select max(salary) from emp where deptid=1) and deptid=1;


4.查找每个部门工资最高的人的名字

           xiaoqiang2               832.51           423.12            
select empname  from emp e1 where salary =(select max(salary) from emp e2 where e1.deptid=e2.deptid);


嵌套    相关  


表: 
员工表:emp

empid    empname      deptid      salary

部门表:dept


deptid   deptname    deptlocation

                                               触发器

触发器:trigger 监视某种情况并出发某个动作

表名字store  列名字 goodsId   goodsNum  goodsName
表名字sale     列名字 orderid      salegoodsid   saleNum

当订单表增加一项时,仓储表发生对应变化:
---总是鼠标会减掉2个
delimiter $
create trigger tg after insert on sale for each row
begin
update store set goodsNum=goodsNum-2000 where goodsId=1;
end$

删除触发器: drop trigger tg;
一个insert或者其他的操作指令只能有一个触发器,所以要删掉


订单下多少,就减掉多少
 delimiter $
 create trigger tg2 after insert on sale for each row
 begin
 update store set goodsNum=goodsNum-new.saleNum where goodsId=new.salegoodsid;
end$


删除订单数据,仓储数据也恢复
 delimiter $
 create trigger tg3 after delete on sale for each row
 begin
 update store set goodsNum=goodsNum+old.saleNum where goodsId=old.salegoodsid;
end$

修改订单数据,仓储数据也修改
delimiter $
 create trigger tg4 after update on sale for each row
 begin
 update store set goodsNum=goodsNum+(old.saleNum-new.saleNum) where goodsId=old.salegoodsid;
end$

before after区别演示:
delimiter $
 create trigger tg5 before insert on sale for each row
 
 begin

   declare max integer;
   select goodsNum into max from store where goodsid=new.salegoodsid;
   if new.saleNum>max then
   set new.saleNum=max;
   end if;

  update store set goodsNum=goodsNum-new.saleNum where goodsid=new.salegoodsid;

end$

                                                 视图索引

1.创建
 create view myv1 as select empname  from emp e1 where salary =(select max(salary) from emp e2 where e2.deptid=e1.deptid);
2.查看
show tables;

3.删除

 drop view myv1;

4.修改

 alter view myv1 as select empname,salary,sex from emp;


5.视图和原表的关系
原表中数据发生变化,则视图数据变化,反之亦然
注意向视图中插入数据的操作并不总是能执行


6.查看索引

show index from emp;

7.添加索引:如果有某一列经常作为查询的依据,那么我们可以给该列加上一个索引
create index in1 on emp (salary);

主键列默认会有索引   唯一约束列默认会有索引

8.删除索引
alter table emp drop index empname;
drop index in1 on emp;

                                             存储过程

begin
 if choice='y' then
 select * from emp where empsalary>num;
 else
 select * from emp where empsalary<num;
 end if;
 end;


 
 
传入一个int值,求该值到1的和


                        5
  create procedure p5(num int)
 begin
 declare temp int;
 declare total int;
 set temp=1;
 set total=0;

 while temp<=num do
 set total=total+temp; 
 set temp=temp+1;  
 end while;
 select total from dual;
 end;

//函数  有返回值   存储过程 没有返回值

第一一个函数  调用方式 select p6(参数);


set global log_bin_trust_function_creators=TRUE;

  create function p6(num int) returns int
 begin
 declare temp int;
 declare total int;
 set temp=1;
 set total=0;
 while temp<=num do
 set total=total+temp;
 set temp=temp+1;
 end while;
 return total;
 end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值