MySQL触发器、分区分表、数据备份及还原、数据库设计三范式

本文详细介绍了MySQL的触发器概念与使用,包括单行和多行触发器,以及如何查看和删除触发器。接着讲解了MySQL的分区策略,如range、list、hash和key分区,以及分区管理和分表操作。同时,讨论了数据备份(mysqldump)和还原的方法。最后,概述了数据库设计的三大范式及其在减少冗余和提高数据一致性方面的重要性。
摘要由CSDN通过智能技术生成

1. MySQL触发器

1.1 触发器概念

       触发器:指事先为某张表绑定一段代码,当表中的某些内容发生改变(增删改)的时候,系统会自动触发代码并执行。

触发器特性:

  • (1)有begin、end体
  • (2)触发条件:insert 、delete、update
  • (3)触发时机:在增删改前或者后 (一个表最多支持六个触发器:增删改*前后)
  • (4)触发频率:针对每一次执行。比较低级(也是缺点)
  • (5)触发器定义在表上,附着在表上。不能定义在临时表、视图上

比较消耗资源,一般不使用

1.2 语法

delimiter $
create trigger trigger_name
[definer = {
  user | current_user}] # 触发器定义者,可省略
trigger_time trigger_event
on table_name for each row
	[trigger_order]
begin
	trigger_body
end $

# 说明
trigger_name: {before | after}
trigger_event:{
  insert | update | delete}
trigger_order:{follows | precedes} other_trigger_name # 在某个触发器触发 之后| 之前 触发   MySQL5.7版本以后才有的功能

注意:

  • replace 也会触发insert ,先把原来数据删除,然后再重新插入
  • 从外部加载数据也会触发insert

1.3 执行单行触发器

单行触发器,begin end可以省略

create trigger 触发器名称
before|after  insert|update|delete
on 表名 for each row
执行语句;  

案例:当新员工入职时,记录员工入职时间

第一步:创建员工表

create table work(
	id int auto_increment primary key,
	name varchar(64)
);

第二步:创建员工打卡时间表

create table insert_table(
	insert_time time
);

第三步:创建触发器

create trigger insert_worker_time 
after insert
on work for each row
insert into insert_table (insert_time) value(now());

第四步:增加员工,触发触发器执行

insert into work(name) value('boss');

在这里插入图片描述

1.4 执行多行触发器

delimiter $
create trigger 触发器名称
before|after  insert|update|delete
on 表名 for each row
begin
	执行语句;  
end $

1.5 触发器使用

1.5.1 查看触发器

show triggers\G

select * from information_schema.TRIGGERS\G

1.5.2 删除触发器

触发器不使用时就把它删除了,以免出现事故

drop trigger 触发器名;

1.6 触发器中的new & old

  • insert事件:new表示将要插入的数据,或者已经插入的数据;没有old
  • update事件:old表示将要或者已经修改的数据,new表示将于或已经被插入的数据
  • delete事件:old表示已经或者将要被删除的数据;,没有new

1.7 案例

案例:完成订单表与1商品表的关联操作
需求:
(1)订单在每插入一条数据,商品表在的库存就要减少对应的数量
(2)最小商品数为0
(3)订单内商品数量,不能超过商品库存总和

第一步:创建商品表

create table goods(
	id int auto_increment primary key,
	name varchar(64),
	num int
);

第二步:创建订单表

create table orders(
	id int auto_increment primary key,
	goods_id int,
	order_num int
);

第三步:创建触发器
需求1

delimiter $

create trigger create_order 
after insert on orders for each row
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值