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触发器模拟断言相关推荐

  1. 计算机国二外键题,2015年计算机二级考试《MySQL》练习试题模拟

    1[填空题]在MySQL中,可以使用INSERT或________语句,向数据库中一个已有的表插入一行或多行元组数据. 参考解析: REPLACE 2[单选题]数据模型反映的是( ) A.事物本身的数 ...

  2. Mysql高级之触发器

    原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...

  3. mysql创建删除触发器的时候_mysql触发器简介及如何创建和删除触发器

    什么是mysql触发器 需要MySQL 5 对触发器的支持是在MySQL 5中增加的.因此,本章内容适用于MySQL 5或之后的版本. MySQL语句在需要时被执行,存储过程也是如此.但是,如果你想要 ...

  4. mysql 动态传入表名 存储过程_面试再问MySQL存储过程和触发器就把这篇文章给他...

    Mysql存储过程及触发器trigger 存储过程 一.一个简单的存储过程 1,一个简单的存储过程 delimiter $$create procedure testa()begin Select * ...

  5. oracle触发器比较,Oracle使用触发器和mysql中使用触发器的比较

    一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志, ...

  6. MySQL的学习--触发器

    转载自https://www.cnblogs.com/CraryPrimitiveMan/p/4206942.html MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在 ...

  7. SQL入门(3):定义约束/断言assertion/触发器trigger

    本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...

  8. mysql查看所有触发器以及存储过程等操作集合

    1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND  TAB ...

  9. Laravel 安装mysql、表增加模拟数据、生成控制器

    参考中文网教程: 安装mysql.表增加模拟数据 http://www.golaravel.com/post/2016-ban-laravel-xi-lie-ru-men-jiao-cheng-yi/ ...

最新文章

  1. 将AI落地到福州、贵阳的「幕后推手」,到底在想些什么?
  2. 【转载】linux 下 cpu使用情况分析
  3. 几个方便编程的C++特性
  4. axios的请求配置
  5. struct多种声明定义写法的小结
  6. android 测试 mock,Mock在Android TDD中的使用
  7. 基于阿里云服务器使用宝塔面板搭建 Typecho 博客
  8. CSS属性:display详解
  9. AcWing 棋盘挑战 dsf
  10. 关于计算机信息管理的照片,2021年10月青海自考计算机科学与技术(计算机信息管理方向)专业报名照片要什么格式...
  11. c语言中sprint的用法
  12. 新浪导航栏下拉菜单案例展示
  13. 利用各向异性平滑图像
  14. Java练习ArrayList的运用——勇者斗史莱姆
  15. 博物馆场馆智能化展览展示解决方案
  16. Linux基本工具(上)
  17. 两个瓶盖换一瓶可乐问题
  18. P4766 [CERC2014]Outer space invaders
  19. docker开放端口
  20. Python自定义钉钉机器人发送自动化结果报告

热门文章

  1. 百度 UEditor--自定义上传文件路径及读取文件
  2. 大数据系列(hadoop) 集群环境搭建二
  3. (原)MongoDB在系统中的使用
  4. Lighttpd1.4.20源码分析之etag.c(h) -------HTTP/1.1中的Etag域
  5. 16、document的_source元数据以及定制返回结果解析
  6. 计算机毕业设计中JAVA 23种开发模式详解(代码举例)
  7. 渐进式Web应用程序居然是Web开发的未来
  8. k3 xp服务器系统,如何在英文XP环境下安装k3系统.doc
  9. C++内存分配方式、内存错误及其对策
  10. java web 课程设计_关于Javaweb课程设计的心得体会.doc