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触发器,太浪费资源,所以这个博文只是一种思想,并不实用。

  • 相关阅读:
    CSS3自适应布局单位 —— vw,vh
    JS 设计模式四 -- 模块模式
    JS 设计模式三 -- 策略模式
    JS 设计模式
    JS 设计模式二 -- 单例模式
    JS 设计模式一 -- 原型模式
    JS 灵活使用 console 调试
    JS 优化条件语句的5个技巧
    JS 函数节流与防抖
    前端性能优化
  • 原文地址:https://www.cnblogs.com/adroitwolf/p/14310035.html
Copyright © 2011-2022 走看看