3 트리거, 저장 프로세스
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.