zoukankan      html  css  js  c++  java
  • 【数据库】MyQSL数据完整性

    不知道怎么取标题,简单提一下数据库的完整性实现问题


    在MySQL中一种不用写trigger也可以实现级联的方式——直接使用外键实现参照完整性(当然trigger的功能不只是实现级联修改/删除,还可以实现一些动态完整性约束

    除此之外还可以通过check约束实现用户定义完整性

    alter table score add constraint  dcheck
    check (Degree>=0)
    

    trigger比上述的外键和check约束更为灵活

    • trigger的格式:
    CREATE TRIGGER [trigger_name]  [AFTER|BEFORE]  [INSERT|UPDATE|DELETE] ON [talbe_name] FOR EACH ROW
    BEGIN
    SQL STATEMENT;
    END;
    
      • BEFORE|AFTER表示了触发器的行动时间,触发器在每行插入表之前|后被激活。
      • INSERT|UPDATE|DELETE表示激活触发器的事件
      • FOR EACH ROW后的语句定义了触发器的具体部分
    • trigger特点:表级自动调用
    • MySQL trigger要求不完全归纳(穷举试错+官方 docs
      • 不允许在After条件下改变New
    ERROR 1362: Updating of NEW row is not allowed in after trigger
    
    CREATE DEFINER=`root`@`localhost` TRIGGER `test`.`score_BEFORE_INSERT` BEFORE INSERT ON `score` FOR EACH ROW
    BEGIN
    IF new.Degree < 60 then
        set new.Degree = 60;
        end if;
    END
    
      •  AFTER的用法

    引入SET的定义&用法

    set @sum=0;
    
    
    CREATE DEFINER=`root`@`localhost` TRIGGER `test`.`score_AFTER_INSERT` AFTER INSERT ON `score` FOR EACH ROW
    BEGIN
    	SET @sum = @sum + 1;
    END
    
    insert into Score values(103,'9-888',92);
    insert into Score values(103,'6-166',92);
    
    select @sum as 'total amount';
    

      此时sum为2

  • 相关阅读:
    parted分区流程操作
    配置sudo命令行为审计
    sudo详细介绍
    groupadd(创建组)重要参数介绍
    useradd常用参数介绍
    /etc/default/useradd文件内容及对应功能
    linux基础正则
    centos 7.5 安装mongodb
    centos 7.5 安装mysql
    php删除制定文件及文件夹
  • 原文地址:https://www.cnblogs.com/yuelien/p/12367930.html
Copyright © 2011-2022 走看看