zoukankan      html  css  js  c++  java
  • Mysql触发器学习

    1.创建准备数据

    --1.创建准备数据库
    --drop database if exists edw;
    create database if not exists edw;
    alter database edw default character SET utf8 COLLATE utf8_general_ci;

    2.创建学生和学生成绩表

    use edw;
    
    --创建学生表
    drop table if exists ods_stu_entity;
    create table if not exists ods_stu_entity(
    id int primary key auto_increment,
    stu_id varchar(64) comment '学号'  unique,
    name varchar(64) comment '姓名',
    sex varchar(16) comment '性别' default '',
    age int  comment '年龄' check(id>0 and id<150),
    grade varchar(16) comment '年级' ,
    address varchar(64) comment '家庭地址'
    )ENGINE=InnoDB default CHARSET=utf8;
    
    
    --创建学生成绩表
    drop table if exists ods_stu_score;
    create table if not exists ods_stu_score(
    id int primary key auto_increment,
    stu_id varchar(64) comment '学号'  unique,
    name varchar(64) comment '姓名',
    grade varchar(16) comment '年级' ,
    chinese float comment '语文成绩' default 0,
    math    float comment '数学成绩' default 0,
    english float comment '英语成绩' default 0
    )ENGINE=InnoDB default CHARSET=utf8;

    3.创建触发器

    功能:当插入学生表数据后,自动在成绩表中插入数据

    --触发器
    --当插入学生信息之后,触发器往成绩表中插入数据
    drop trigger if exists trigger_ods_stu_score;
    create trigger trigger_stu_score 
    after insert on ods_stu_entity for each row
    begin
        insert into ods_stu_score (stu_id,name,grade) 
        values (new.stu_id,new.name,new.grade);
    end;

    4.测试验证结果

    --测试插入一条学生数据
    insert into ods_stu_entity(stu_id,name,sex,age,grade,address) values('120510016','Jim','','27','大一','江西省上饶市婺源县');
    insert into ods_stu_entity(stu_id,name,sex,age,grade,address) values('120510017','Jack','','26','大一','浙江省杭州市西湖区');
    insert into ods_stu_entity(stu_id,name,sex,age,grade,address) values('120510018','Lucy','','25','大一','辽宁省大连市沙河口区');
    
    
    --查看学生表
    select * from ods_stu_entity;
    
    --查看成绩表中是否有数据
    select * from ods_stu_score;

    学生表结果:

       

    成绩表结果:

    创建触发器一个执行语句格式:

      CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句;

    创建触发器多个执行语句格式:   

         CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件

         ON 表名 FOR EACH ROW

         BEGIN

            执行语句列表

         END;

    触发器执行顺序

    • 如果 BEFORE 触发器执行失败,SQL 无法正确执行;
    • SQL 执行失败时,AFTER 型触发器不会触发;
    • AFTER 类型的触发器执行失败,SQL 会回滚;
  • 相关阅读:
    Weekly blog for week 1908
    Weekly blog for week 1907
    Weekly blog for week 1905&1906
    Weekly blog for week 1904
    Write Week 3 Blog beforehand
    Add Week 2 Blog
    First week of a new year
    Andriod-Log
    bat
    学习方法
  • 原文地址:https://www.cnblogs.com/Jims2016/p/10854242.html
Copyright © 2011-2022 走看看