3 트리거, 저장 프로세스

25424 단어
만약 트리거와 저장 프로세스가 명령줄에서 실행된다면, 반드시 끝 표지 문자를 변경해야 한다.
  delimiter ||   delimiter ;
1. 트리거:
트리거는 테이블과 관련된 데이터베이스 대상으로 정의 조건을 충족시킬 때 트리거하고 트리거에 정의된 문장 집합을 실행한다.트리거의 이런 특성은 데이터베이스에 응용하여 데이터의 완전성을 확보하는 데 도움을 줄 수 있다.
예를 들어 당신은 현재 두 개의 표[유저표]와 [로그표]가 있습니다. 한 사용자가 만들어질 때 로그표에 만들어진log 로그를 삽입해야 합니다. 만약에 트리거를 사용하지 않는 상황에서 프로그램 언어 논리를 작성해야 실현할 수 있지만 만약에 트리거를 정의했다면,트리거의 역할은 사용자 테이블에 데이터를 삽입한 후에 로그 테이블에 로그 정보를 삽입하는 것입니다.물론 트리거는 삽입 작업만 할 수 있는 것이 아니라 수정, 삭제도 할 수 있다.
    
**************************************************************************   ***********************************************************************
1. (after/before): after : sql sql before : sql sql 2. (insert/update/delete): 3. : create trigger trigger_name after/before insert/update/delete on tb_name for each row begin sql : //( ) end; 4. : show triggers; show create trigger . 5. : drop trigger trigger_name; ————————————————————————————————————————————————————————————— ①insert ————————————————————————————————————————————————————————————— drop table if exists student; create table student( id int, name varchar(100) ); drop table if exists copy; create table copy( copy_id int, copy_name varchar(100) ); ————————————————————————————————————————————————————————————— drop trigger if exists ins_stu; create trigger ins_stu after insert on student for each row begin insert into copy(copy_id,copy_name) values(new.id, new.name); end; : insert into student values(1,'A'); select * from student; select * from copy; ————————————————————————————————————————————————————————————— ②update ————————————————————————————————————————————————————————————— DROP TRIGGER if EXISTS upd_stu; CREATE TRIGGER upd_stu AFTER update ON student FOR EACH ROW BEGIN update copy set copy_name = new.name where copy_id = new.id; END; :update student set name = 'AAA' where id = 1; select * from student; select * from copy; ————————————————————————————————————————————————————————————— ③delete ————————————————————————————————————————————————————————————— DROP TRIGGER if EXISTS del_stu; CREATE TRIGGER del_stu AFTER DELETE ON student FOR EACH ROW BEGIN delete from copy where copy_id = old.id; END; :delete from student where id = 1; select * from student; select * from copy;

2. 저장 프로세스
       1.    :

                     ,          ,   SQL         。
                                ,         ,
                    。                           ,            。

       2.  :

          ①  SQL         
        ② :       ③       ④ :       ⑤
3.  :

        CREATE PROCEDURE myproc(OUT s int)
          BEGIN
                SELECT COUNT(*) INTO s FROM students;
          END

 4.  :

        ①       @  ,        begin....end 
        ②     MySQL     :  、   、     。

        ③  :
                :SET     =     
                :declare          [default value];

        ④  :
           ————————————————————————————————————————————————————————————
            SET @y='Goodbye Cruel World';
            SELECT @y;                //      
    
            begin
                declare num int default 10;        //      
                select num;
            end
           ————————————————————————————————————————————————————————————
 
5. :( : return )  ①IN : , , ( )  ②OUT : , ( )  ③INOUT : , ( )
 ④ : ———————————————————————————————————————————————————————————— IN:
********************** *****************     DROP PROCEDURE if EXISTS in_param;     CREATE PROCEDURE in_param(IN p_in int)    BEGIN     SELECT p_in;      SET p_in=2;      SELECT p_in;     END; ********************** ********************     SET @p_in=1;     CALL in_param(@p_in);     SELECT @p_in; ********************** ********************     1 2 1
out********************** ***************** DROP PROCEDURE if EXISTS out_param; CREATE PROCEDURE out_param(OUT p_out int) BEGIN SELECT p_out; SET p_out=2; SELECT p_out; END; ********************** ******************** SET @p_out=1; CALL out_param(@p_out); SELECT @p_out; ********************** ******************** null 2 2
inout:
********************** ***************** DROP PROCEDURE if EXISTS inout_param; CREATE PROCEDURE inout_param(INOUT p_inout int) BEGIN SELECT p_inout; SET p_inout=2; SELECT p_inout; END; ********************** ******************** SET @p_inout=1; CALL inout_param(@p_inout); SELECT @p_inout; ********************** ******************** 1 2 2 ———————————————————————————————————————————————————————————— 7. : : SHOW PROCEDURE STATUS; SHOW PROCEDURE STATUS WHERE db=' '; : SHOW CREATE PROCEDURE . ; 8. : DROP PROCEDURE ; 9. : ———————————————————————————————————————————————————————————— ①IF-THEN-ELSE-END IF (if ) ———————————————————————————————————————————————————————————— create table person( age int, info varchar(100) ); : 18,info = “ ”, 18,info = “ ” ********************* ***************** DROP PROCEDURE IF EXISTS proc2; CREATE PROCEDURE proc2(IN age int) BEGIN IF age > 18 THEN set @info = ' '; insert into person values(age,@info); ELSE set @info = ' '; insert into person values(age,@info); END IF ; select * from person; END ; ********************** ********************   CALL proc2(16); ———————————————————————————————————————————————————————————— ②CASE-WHEN-THEN-ELSE(case ) ———————————————————————————————————————————————————————————— ********************** ***************** DROP PROCEDURE IF EXISTS proc3; CREATE PROCEDURE proc3(IN age INT) BEGIN CASE age WHEN 10 THEN set @info = ' '; insert into person values(age,@info); WHEN 20 THEN set @info = ' '; insert into person values(age,@info); ELSE set @info = ' '; insert into person values(age,@info); END CASE ; select * from person; END ; ********************** ******************** CALL proc3(10); ———————————————————————————————————————————————————————————— ③WHILE-DO…END-WHILE(while.....do ) ———————————————————————————————————————————————————————————— ********************** ***************** DROP PROCEDURE IF EXISTS proc4; CREATE PROCEDURE proc4() BEGIN SET @var=0; WHILE @var<6 DO select @var; SET @var=@var+1; END WHILE ; END; ********************** ******************** CALL proc4(); ———————————————————————————————————————————————————————————— ④REPEAT...END REPEAT(do....while ) ———————————————————————————————————————————————————————————— ********************** ***************** DROP PROCEDURE IF EXISTS proc5; CREATE PROCEDURE proc5 () BEGIN SET @v=0; REPEAT select @v; SET @v=@v+1; UNTIL @v>=5 END REPEAT; END; ********************** ******************** CALL proc5(); ———————————————————————————————————————————————————————————— ⑤LOOP...END LOOP (LOOP ) ———————————————————————————————————————————————————————————— LOOP_LABLE , ,LEAVE ********************** ***************** DROP PROCEDURE IF EXISTS proc6; CREATE PROCEDURE proc6 () BEGIN SET @v=0; LOOP_LABLE:LOOP select @v; SET @v=@v+1; IF @v >=5 THEN LEAVE LOOP_LABLE; END IF; END LOOP; END; ********************** ******************** CALL proc6(); ———————————————————————————————————————————————————————————— 10. : ① : , select , 。 。 ② : , , , , 。 ③ : 、 、 , 。 ④ : -> -> -> -> 。 ⑤ :100 , 2,5,7 ———————————————————————————————————————————————————————————— create table t1( id int, info1 varchar(100), info2 varchar(100), info3 varchar(100) ); DROP PROCEDURE IF EXISTS proc7; CREATE PROCEDURE proc7() BEGIN SET @var=1; WHILE @var<101 DO insert into t1(id) values(@var); SET @var=@var+1; END WHILE ; select * from t1; END; call proc7(); // ———————————————————————————————————————————————————————————— drop procedure if exists cursor_test; create procedure cursor_test() begin declare id int; declare info1 varchar(100); declare info2 varchar(100); declare info3 varchar(100); DECLARE done INT DEFAULT 0; declare mycursor cursor for select *from t1; declare continue handler for not FOUND set done = 1; open mycursor; LOOP_LABLE:LOOP fetch next from mycursor into id,info1,info2,info3; IF done = 1 THEN LEAVE LOOP_LABLE; END IF; IF MOD(id,2) = 0 THEN set info1=CONCAT(id,': 2 ;'); else set info1=CONCAT(id,': 2 ;'); END IF ; IF MOD(id,3) = 0 THEN set info2=CONCAT(id,': 3 ;'); else set info2=CONCAT(id,': 3 ;'); END IF ; IF MOD(id,5) = 0 THEN set info3=CONCAT(id,': 5 ;'); else set info3=CONCAT(id,': 5 ;'); END IF ; set @varid =id; set @varinfo1=info1; set @varinfo2 =info2; set @varinfo3=info3; update t1 set info1 = @varinfo1 where id = @varid; END LOOP; close mycursor; end; call cursor_test(); ————————————————————————————————————————————————————————————

 
전재 대상:https://www.cnblogs.com/lihaozong2013/p/10631178.html

좋은 웹페이지 즐겨찾기