zoukankan      html  css  js  c++  java
  • mysql学习之check无效的解决及触发器的使用

    SQL的约束种类:

    一、非空约束 not null

    二、唯一约束 unique

    三、主键约束

    四、外键约束

    五、check约束  

    该约束可用于列之间检查语义限制的,实际应用过程中非常常用!!

    然鹅,MySQL中的check约束是无效的,哭哭

    好在,经过多方搜索,找到了另一种代替方法,简单易学,上手好用。。。那就是触发器,一起来学习学习嗷┗|`O′|┛ 嗷~~

    • 触发器的设置

    触发器(trigger):监视某种情况,并触发某种操作。

    触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)

    语法:

    create trigger triggerName
    
    after/before insert/update/delete on 表名
    
    for each row   #这句话在mysql是固定的
    
    begin
    
    sql语句;
    
    end;
    

      

    注意一点哦

    在MySQL中,BEGIN … END 语句的语法为:

    BEGIN
    [statement_list]
    END

    其中,statement_list 代表一个或多个语句的列表,列表内的每条语句都必须用分号(;)来结尾。
    而在MySQL中,分号是语句结束的标识符,遇到分号表示该段语句已经结束,MySQL可以开始执行了。因此,解释器遇到statement_list 中的分号后就开始执行,然后会报出错误,因为没有找到和 BEGIN 匹配的 END。

    这时就会用到 DELIMITER 命令(DELIMITER 是定界符,分隔符的意思),它是一条命令,不需要语句结束标识,语法为:
    DELIMITER new_delemiter
    new_delemiter 可以设为1个或多个长度的符号,默认的是分号(;),我们可以把它修改为其他符号,如:DELIMITER:DELIMITER
    在这之后的语句,以分号结束,解释器不会有什么反应,只有遇到了$,才认为是语句结束。注意,使用完之后,我们还应该记得把它给修改回来。

    最后来一个小例子:

    delimiter $
    create trigger S_P after insert on books for each row begin delete from books where sale_price < purchase_price;
    #设置商品售价不得小于进货价格 end$ #显示插入成功后 Query OK, 0 rows affected (0.30 sec) delimiter ;

     希望可以帮助到大家哦 Thanks♪(・ω・) 

      爱大家ノ(づ ̄3 ̄)づ╭❤~

  • 相关阅读:
    关于缓存雪崩穿透击穿等一些问题
    MethodHandler笔记
    并发总结(博客转载)
    负载均衡的几种算法Java实现代码
    SpringJdbc插入对象返回主键的值
    【Java基础】01-推荐参考材料
    【Java基础】注解
    【JSON】
    【Kafka】3-配置文件说明
    【Kafka】1-理论知识
  • 原文地址:https://www.cnblogs.com/cola-1998/p/10719881.html
Copyright © 2011-2022 走看看