数据库: 存储过程/触发器
数据库: 存储过程/触发器(mysql)
- 我对数据库存储过程/触发器的理解
- 存储过程: 和编程里面的函数类似,只需要掉用,就会执行预先设定好的过程
- 触发器: 可以在每次sql操作的前后执行动作,钩子函数.(增强sql语句的功能)
简单练习
- 创建数据库
1
2CREATE DATABASE `foodfactory` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- 创建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24CREATE TABLE `food` (
`id` int NOT NULL AUTO_INCREMENT,
`fname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`stock` varchar(255) DEFAULT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `provider` (
`id` int NOT NULL AUTO_INCREMENT,
`pname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`addr` varchar(255) DEFAULT NULL,
`tel` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
CREATE TABLE `f2p_fk` (
`id` int NOT NULL AUTO_INCREMENT,
`f_id` int DEFAULT NULL,
`p_id` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `f_id` (`f_id`),
KEY `p_id` (`p_id`),
CONSTRAINT `f_id` FOREIGN KEY (`f_id`) REFERENCES `food` (`id`) ON DELETE SET NULL,
CONSTRAINT `p_id` FOREIGN KEY (`p_id`) REFERENCES `provider` (`id`) ON DELETE SET NULL
) ;
- 创建数据库
多表查询
1
select * from food ,provider ,f2p_fk WHERE f2p_fk.id = 1 AND f2p_fk.p_id = provider.id AND f2p_fk.f_id = food.id
修改语句
1
UPDATE foodfactory.food SET stock = '200' WHERE id = 3;
存储过程
1
CREATE PROCEDURE reStock(IN f_id INTEGER) BEGIN UPDATE foodfactory.food SET stock = '0' WHERE id = f_id; END^
触发器
1
2
3
4
5
6
7
8
9delimiter ^
CREATE TRIGGER upd_check BEFORE UPDATE ON food
FOR EACH ROW
BEGIN
IF NEW.stock < 0 THEN
SET NEW.stock = 0;
END IF;
END^
delimiter ;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 jiujue!
评论