mysql 断言,mysql触发器模拟断言
Let’s consider table
Video(
IDvideo(PK),
Date,
Description,
User
)
with mysql I have no way of writing assertions.
Is it possible to simulate the following assertion using one or more triggers ?
create assertion asser1
check (0 =
( select count(*)
from Video
where Date >= DATE_SUB(current_date(),INTERVAL 1 YEAR )
&& Date<=current_date()
group by User
having count(*) > 200
)
)
how should I write that trigger?
解决方案
Well, the problem is that MySQL doesn't have an equivalent of a STOP ACTION command. So basically, the work arounds are quite dirty:
One way is that you can violate a constraint inside the trigger to bubble an error and cancel the insert:
CREATE TABLE stop_action (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(35),
UNIQUE KEY (id, name)
);
INSERT INTO stop_action (1, 'Assert Failure');
Then, in the trigger, just try to:
INSERT INTO stop_action (1, 'Assert Failure');
The benefit of that, is that the error that's returned will be a duplicate key error, and the text will include "Assert Failure".
So then your trigger would become:
delimiter |
CREATE TRIGGER asser1_before BEFORE INSERT ON test1
FOR EACH ROW BEGIN
SELECT count(*) INTO test FROM (select count(*)
from Video
where Date >= DATE_SUB(current_date(),INTERVAL 1 YEAR )
&& Date<=current_date()
group by User
having count(*) > 200);
IF test != 0 THEN
INSERT INTO stop_action (1, 'Assert Failure');
END IF;
END;
|
delimiter ;
Now, you'd need to do this before UPDATE as well, otherwise you could update the date into an invalid state. But otherwise, that should at least get you started...
mysql 断言,mysql触发器模拟断言相关推荐
- 计算机国二外键题,2015年计算机二级考试《MySQL》练习试题模拟
1[填空题]在MySQL中,可以使用INSERT或________语句,向数据库中一个已有的表插入一行或多行元组数据. 参考解析: REPLACE 2[单选题]数据模型反映的是( ) A.事物本身的数 ...
- Mysql高级之触发器
原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...
- mysql创建删除触发器的时候_mysql触发器简介及如何创建和删除触发器
什么是mysql触发器 需要MySQL 5 对触发器的支持是在MySQL 5中增加的.因此,本章内容适用于MySQL 5或之后的版本. MySQL语句在需要时被执行,存储过程也是如此.但是,如果你想要 ...
- mysql 动态传入表名 存储过程_面试再问MySQL存储过程和触发器就把这篇文章给他...
Mysql存储过程及触发器trigger 存储过程 一.一个简单的存储过程 1,一个简单的存储过程 delimiter $$create procedure testa()begin Select * ...
- oracle触发器比较,Oracle使用触发器和mysql中使用触发器的比较
一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志, ...
- MySQL的学习--触发器
转载自https://www.cnblogs.com/CraryPrimitiveMan/p/4206942.html MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在 ...
- SQL入门(3):定义约束/断言assertion/触发器trigger
本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...
- mysql查看所有触发器以及存储过程等操作集合
1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND TAB ...
- Laravel 安装mysql、表增加模拟数据、生成控制器
参考中文网教程: 安装mysql.表增加模拟数据 http://www.golaravel.com/post/2016-ban-laravel-xi-lie-ru-men-jiao-cheng-yi/ ...
最新文章
- 将AI落地到福州、贵阳的「幕后推手」,到底在想些什么?
- 【转载】linux 下 cpu使用情况分析
- 几个方便编程的C++特性
- axios的请求配置
- struct多种声明定义写法的小结
- android 测试 mock,Mock在Android TDD中的使用
- 基于阿里云服务器使用宝塔面板搭建 Typecho 博客
- CSS属性:display详解
- AcWing 棋盘挑战 dsf
- 关于计算机信息管理的照片,2021年10月青海自考计算机科学与技术(计算机信息管理方向)专业报名照片要什么格式...
- c语言中sprint的用法
- 新浪导航栏下拉菜单案例展示
- 利用各向异性平滑图像
- Java练习ArrayList的运用——勇者斗史莱姆
- 博物馆场馆智能化展览展示解决方案
- Linux基本工具(上)
- 两个瓶盖换一瓶可乐问题
- P4766 [CERC2014]Outer space invaders
- docker开放端口
- Python自定义钉钉机器人发送自动化结果报告
热门文章
- 百度 UEditor--自定义上传文件路径及读取文件
- 大数据系列(hadoop) 集群环境搭建二
- (原)MongoDB在系统中的使用
- Lighttpd1.4.20源码分析之etag.c(h) -------HTTP/1.1中的Etag域
- 16、document的_source元数据以及定制返回结果解析
- 计算机毕业设计中JAVA 23种开发模式详解(代码举例)
- 渐进式Web应用程序居然是Web开发的未来
- k3 xp服务器系统,如何在英文XP环境下安装k3系统.doc
- C++内存分配方式、内存错误及其对策
- java web 课程设计_关于Javaweb课程设计的心得体会.doc