zoukankan      html  css  js  c++  java
  • mysql 利用触发器来实现check约束


    由于我用的是mysql5.6.34版本,所以据我的了解来看,mysql对于check约束还是一个摆设。

    但是我们可以利用触发器(trigger)来实现一种类check约束

    下面我们来一个实例:


    我们需要创建一个学生表 sno 主键,sage 年龄在16-20之内

    这个sage就是一个check约束

    首先我们创建我们的studen表

    CREATE TABLE Student (
    	Sno VARCHAR(3) PRIMARY KEY,
    	Sage INT ,
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    

    接着我们创建触发器

    # 这个是在插入insert之前触发 指定是在student表
    CREATE TRIGGER test_student_insert_check BEFORE INSERT
    ON Student FOR EACH ROW
    BEGIN
    	DECLARE msg varchar(100);
    	IF NEW.Sage <= 16 OR NEW.Sage >= 20 
    	THEN
    		SET msg = CONCAT('无效的年龄!');
    		SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
    	END IF;
    END;
    

    注意,虽然这样可以做到check的效果,但是还是非常不建议用触发器,因为太慢了,所以我们最好还是在插入之前判断,例如spring的service层。

    而且,这个插入只是管理insert插入的,更新的话还是不会拦截的,而且我们又不可能在创建一个update触发器,太浪费资源,所以这个博文只是一种思想,并不实用。

  • 相关阅读:
    几个简单递归js 实现
    js中阻止事件冒泡
    判断是否IE 最酷的代码
    C# Hashtable 读取 key 和 value
    ubuntu搭建jdk+jenkins
    Shell逻辑运算符及表达式
    Linux命令的返回值
    python调用c/c++时传递结构体参数
    Git错误总结
    Bash Shell中命令行选项/参数处理
  • 原文地址:https://www.cnblogs.com/adroitwolf/p/14310035.html
Copyright © 2011-2022 走看看