mysql----join查询,事物,触发器

join 连接查询:
当我们期望的结果不再同一张表上时,我们需要使用join连接查询,要记清在什么位置是

变量,表名,列名之类的。。。。把两个不同的表关联起来,关键是找到相同的一列
语法:
table1 join table2 on table1的某个字段 = table2的某个字段
条件是 商品表中商品的分类id =  分类表中这个分类的id
例如:
select goods_name,shop_price,cat_name from ecs_goods join ecs_category on

ecs_goods.cat_id = ecs_category.cat_id where ecs_goods.shop_price>=1000;
这会查询出ecs_goods中的goods_name,shop_price 和 ecs_category表中的cat_name
靠cat_id连接两个表


join的分类:
左连接查询 left join:查询的结果是只要左边有的记录,都会显示,右边没有的显示

为null
右连接查询 right join
内连接查询 inner join : 查询的结果是两个表都有的数据




事物:
事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这

个特性就是事务,由start transaction开始,用commit(写入数据库)或rollback(回滚

,不写入数据库)结束,这之间的所有数据库操作是一组事物,其中有一条语句错误,

都可以使用rollback回滚,不对数据库做任何改变;

注意:mysql数据支持事务,但是要求必须是innoDB存储引擎
解决这个问题:
mysql的事务解决这个问题,因为mysql的事务特性,要求这组操作,要不全都成功,要

不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全

开启事务后,只要不执行commit,sql语句不会对真实的数据库造成影响
只有执行commit之后,才会对真实数据库造成影响

在PHP中具体使用方法为,先执行开启事物语句,执行多个sql语句,判断执行成功否,

在根据情况使用commit或者rollback;
例:
    start transaction;
    insert into table values('213','321','123');
    insert into table values('213','321','123');
    。。。。。
    commit or rollback   (看代码执行情况)
    



触发器:
触发器是数据库的一个程序,他是用来监听着数据表的某个行为,一旦数据表的这个行

为发生了,马上执行相应的sql语句

触发器的语法结构:
create trigger 触发器的名称 触发时间(after或before) 触发器事件 on 监听的表名 for each row 行为发生后

执行的sql语句

触发器事件组成:;两部分组成:
触发器事件发生的时间-----是在监听的表的行为 after  before  常用的是after
触发器执行的内容:增删改

触发器是什么?
用来监听数据表的某个行为(insert,delete,update),一旦这个行为发生了,马上

执行相应的sql语句

先来个例句:

create trgger alter_goods_number after insert on `order`for each row update

goods set goods_number = goods_number-5 where goods_id = 1;

大致意思就是给,order表绑定事件,当order表增加新条目的时候(范围是每一行),执

行update goods set....语句

如何在触发器中使用触发数据?
什么是触发的数据:就是用户在订单表中购买的数量
new 关键字代表新增加的数量,订单表中新下的订单数量
old 关键字代表是旧的记录(过去的记录,取消的订单数量)

需求:触发之后执行的语句一般都不会是固定的参数,例如订单,要根据订单修改存货

数量就需要知道订单上的货物数量;我们使用old和new来调用触发数据


old和new是调用触发数据,触发数据就是触发了触发器的那条语句中的数据
至于old和new的区别,在添加的时候就要用new数据,删除的时候就是old数据,要是

update那就new和old都有数据
例:用户修改订单时候的old和new使用

create trigger update_goods_number after update on `order` for each row

update goods set goods_number = goods_number+old.buy_number-new.buy_number

where goods_id = new.goods_id;

调用触发数据中的一列就用.就行了,这个触发器中的更新语句意思是:将goods_number

的数量改为 先有数量+修改前的订单中的商品数量-新修改的订单中的商品数量


删除触发器:
drop trigger 触发器的名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值