【997755.com澳门葡京】MySQL存款和储蓄进度例子,完结MySQL里动态视图代码

系统经过某种形式生成三个唯一的ID(可以是应用端,也足以是数据库教程的uuid),然后将计划与那么些id进行关联就可以。

  需求:

一、存储进度

MySQL存款和储蓄进度例子,包罗事务,参数,嵌套调用,游标,循环等

代码:

  用户为C/S结构,每一种用户根据角色差别,能来看不一致的多少。系统会依据有个别标记生成一个多少内容,然后通过统一的视图来拜会。

开创进度如下 先更动截至符号

MySQL存款和储蓄进程例子,包括事务,参数,嵌套调用,游标,循环等

drop table if exists test;
create table test (
id int not null,
name varchar(20) not null
);
insert into test values(1,’test1′);
insert into test values(1,’test11′);
insert into test values(1,’test111′);
insert into test values(2,’test2′);
insert into test values(2,’test22′);
drop function if exists getSpid;
delimiter |
CREATE function getSpid()
RETURNS int
RETURN @spid;
|
delimiter ;
drop view if exists v_test;
create view v_test as
select * from test where id=getSpid();
– 测验代码
– 开启session 1
set @spid=1;
select * from v_test;
– 开启session 2
set @spid=2;
select * from v_test;

  必要,不能够修改视图,也不能在图谋外面再嵌套一层查询。

delimiter && //表示以&&为结束符号

drop procedure if exists pro_rep_shadow_rs;  
delimiter |  
———————————-  
— rep_shadow_rs  
— 用来拍卖音信的加码,更新和删除  
— 每一趟只更新上次来讲从未做过的数据  
— 依照差异的标识位  
— 须求二个输出的参数,  
— 要是回到为0,则调用退步,事务回滚  
— 假诺回去为1,调用成功,事务提交  
—  
— 测验方法  
— call pro_rep_shadow_rs(@rtn);  
— select @rtn;  
———————————-  
create procedure pro_rep_shadow_rs(out rtn int)  
begin  
    — 申明变量,全数的申明必须在非表明的言语前边  
    declare iLast_rep_sync_id int default -1;  
    declare iMax_rep_sync_id int default -1;  
    — 假诺出现非常,或机关管理并rollback,但不再公告调用方了  
    —
若是希望选获得到特别,须要将上面这一句,以及运维职业和付出业务的说话全体去掉  
    declare exit handler for sqlexception rollback;  
    — 查找上二回的  
    select eid into iLast_rep_sync_id from rep_de_proc_log where
tbl=’rep_shadow_rs’;  
    — 假使不设有,则扩展一行  
    if iLast_rep_sync_id=-1 then  
      insert into rep_de_proc_log(rid,eid,tbl)
values(0,0,’rep_shadow_rs’);  
      set iLast_rep_sync_id = 0;  
    end if;  
      
    — 下一个数字  
    set iLast_rep_sync_id=iLast_rep_sync_id+1;  
    — 设置暗中同意的归来值为0:失败  
    set rtn=0;  
      
    — 运行专业  
    start transaction;  
    — 查找最大编号  
    select max(rep_sync_id) into iMax_rep_sync_id from
rep_shadow_rs;  
    — 有新数据  
    if iMax_rep_sync_id>=iLast_rep_sync_id then  
        — 调用  
        call
pro_rep_shadow_rs_do(iLast_rep_sync_id,iMax_rep_sync_id);  
        — 更新日志  
        update rep_de_proc_log set
rid=iLast_rep_sync_id,eid=iMax_rep_sync_id where
tbl=’rep_shadow_rs’;  
    end if;  
      
    — 运转未有那一个,提交业务  
    commit;  
    — 设置再次回到值为1 
    set rtn=1;  
end;  
|  
delimiter ;  
drop procedure if exists pro_rep_shadow_rs_do;  
delimiter |  
———————————  
— 处理钦赐编号范围内的数量  
— 须求输入2个参数  
— last_rep_sync_id 是数码的矮小值  
— max_rep_sync_id 是数码的最大值  
— 无重临值  
———————————  
create procedure pro_rep_shadow_rs_do(last_rep_sync_id int,
max_rep_sync_【997755.com澳门葡京】MySQL存款和储蓄进度例子,完结MySQL里动态视图代码。id int)  
begin  
    declare iRep_operationtype varchar(1);  
    declare iRep_status varchar(1);  
    declare iRep_Sync_id int;  
    declare iId int;  
    — 那么些用于拍卖游标到达最后一行的动静  
    declare stop int default 0;  
    — 申明游标  
    declare cur cursor for select
id,Rep_operationtype,iRep_status,rep_sync_id from rep_shadow_rs
where rep_sync_id between last_rep_sync_id and
max_rep_sync_id;  
    — 评释游标的相当处理,设置三个停下标志  
    declare CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET stop=1;  
      
    — 张开游标  
    open cur;  
      
    — 读取一行数据到变量  
    fetch cur into
iId,iRep_operationtype,iRep_status,iRep_Sync_id;  
    — 那个便是判断是或不是游标已经达到了最后  
    while stop <> 1 do 
        — 各样判别  
        if iRep_operationtype=’I’ then  
            insert into rs0811 (id,fnbm) select id,fnbm from
rep_shadow_rs where rep_sync_id=iRep_sync_id;  
        elseif iRep_operationtype=’U’ then  
        begin  
            if iRep_status=’A’ then  
                insert into rs0811 (id,fnbm) select id,fnbm from
rep_shadow_rs where rep_sync_id=iRep_sync_id;  
            elseif iRep_status=’B’ then  
                delete from rs0811 where id=iId;  
            end if;  
        end;  
        elseif iRep_operationtype=’D’ then  
            delete from rs0811 where id=iId;  
        end if;   
          
        — 读取下一行的数量   
        fetch cur into
iId,iRep_operationtype,iRep_status,iRep_Sync_id;  
    end while;  — 循环截止  
    close cur; — 关闭游标  
 end;  

说明:

  设计:

create procedure test(a int)

use testprocedure;

将转移的ID保持到session变量里面

  系统通过某种方式生成二个唯一的ID(可以是应用端,也得以是数据库的uuid),然后将谋算与那么些id实行关联就可以。

begin

delimiter //

然后建构自定义函数,重临那一个变量

  代码:

select * from student where sno=a;

create procedure simpleproce1 (out par1 int)
begin
 select count(*) into par1 from proce;
end
//

终极在视图里面调用那个函数

  drop table if exists test;
  create table test (
  id int not null,
  name varchar(20) not null
  );
  insert into test values(1,’test1′);
  insert into test values(1,’test11′);
  insert into test values(1,’test111′);
  insert into test values(2,’test2′);
  insert into test values(2,’test22′);
  drop function if exists getSpid;
  delimiter |
  CREATE function getSpid()
  RETURNS int
  RETURN @spid;
  |
  delimiter ;
  drop view if exists v_test;
  create view v_test as
  select * from test where id=getSpid();
  – 测量检验代码
  – 开启session 1
  set @spid=1;
  select * from v_test;
  – 开启session 2
  set @spid=2;
  select * from v_test;

end &&

delimiter ;
call simpleproce1(@a);

代码: drop table if exi…

  说明:

运用的时候用 call test(x);  x为int类型 表示带参存款和储蓄进度

select @a;

  将调换的ID保持到session变量里面

begin

#<2>,每回唯有十足的行能够被取回select id,name into par1,par2 from
proce LIMIT 1;中的LIMIT 1;

  然后建设构造自定义函数,再次来到这几个变量

declare a int;  //当需求定义参数的时候在begin里面定义
并且具有语句必须有分公司;结尾 不然报错

use testprocedure;

  最后在视图里面调用这一个函数

set a=5;

delimiter //

用户为C/S结构,每个用户依照剧中人物不相同,能看到分歧的数额。系统会依据有个别标记生成二个数量内容,然后经过统一的视图来访问。…

select * from student where sno=a;

DROP procedure IF EXISTS simpleproce2

二、自定义函数

create procedure simpleproce2 (out par1 int,out par2 char(30))
begin
 select id,name into par1,par2 from proce LIMIT 1;
end
//

创办自定义函数进度如下 准绳和仓库储存进度大约

delimiter ;
call simpleproce2(@a,@b);

delimiter &&

select @a,@b;

create function test5(i int,o int,p int)

 
## *********second test,function************
#<3>
delimiter //

returns int

DROP FUNCTION IF EXISTS hello
//

begin  // declare d int; 也能够在begin之后声澳优个变量

create function hello(s char(20)) returns char(50)
  return concat(‘Hello, ‘,s,’!’);
//

set p=i*o; //同理用set创造函数体

delimiter ;
select hello(‘world’);

return p;

show create function testprocedure.helloG

end &&

  #它再次来到子程序的表征,如数据库,名字,类型,创立者及成立和修改日期
show function status like ‘hello’G

以此是带参并且是begin里面有函数体的函数

#<4>
#留意name不能够和字段名同样
delimiter //
DROP procedure IF EXISTS test //

运用的时候用  select test5(i,o,p) 赋值3个int就可以 施行结果只与函数体有关

CREATE PROCEDURE test ()
  BEGIN
    DECLARE name VARCHAR(5) DEFAULT ‘bob’;
    DECLARE newname VARCHAR(5);
    DECLARE xid INT;
   
    SELECT name,id INTO newname,xid
      FROM proce WHERE name = name;
    SELECT newname;
  END;
//

三、触发器

call test1() //

创办触发器 首先也是delimiter一下 然后

#***
delimiter //
DROP procedure IF EXISTS test2 //

delimiter &

CREATE PROCEDURE test2 ()
  BEGIN
   
    DECLARE newname VARCHAR(5);
    DECLARE xid INT;
   
    SELECT name,id INTO newname,xid
      FROM proce limit 1;
    SELECT newname,xid;
  END;
//

create trigger test after insert on student for each row 
//这里能够有after 和 before二种触发器

call test2() //

update student_h set row=row+1;  //当有函数体的时候用begin包裹起来

#<5>
use testprocedure;
CREATE PROCEDURE p1 () SELECT * FROM proce;

end &

call p1();

四、数据库全体账户

#<6>注意此处的handler是设置SQLSTATE值,SQLWA凯雷德NING是对具有以01早先的SQLSTATE代码的笔记
#NOT FOUND是对具有以02开端的SQLSTATE代码的笔记
#SQLEXCEPTION是对具有没有被SQLWA奇骏NING或NOT
FOUND捕获的SQLSTATE代码的笔记
#DECLARE CONTINUE HANDLE福睿斯申明CONTINUE十分管理
#事实上这里的23000SQLSTATE是更常用的,当外键约束出错或主键约束出错就被调用了。
#当未有爆发该2两千十分时, select @x2的值将是null,而不是1,
#并且后边的第4个语句试行时将会报主键约束错误,此时@x2=1,@x=4,尽管第2句有了特别,可是前面的话语继续推行
#保留到多少的数据是3,test3和5,test5

三连串型:create login login_name   //登陆账户 指登陆sql
server二零一零的账户 能够具备五个user 如下

use testprocedure;
delimiter //
DROP procedure IF EXISTS handlerdemo
//

create user user_name           // 数据库用户
隶属于账户里面包车型客车,可以简称为映射 grant on 表名 to <用户名,账号名>
with grant option代表该宗旨能够向其它体贴给予所内定的权力

create procedure handlerdemo()
begin
 declare continue handler for sqlstate ‘23000’ set @x2=1;
 set @x=1;
 insert into proce values(3,’test3′);
 set @x=2;
 insert into proce values(3,’test4′);
 set @x=3;
 insert into proce values(5,’test5′);
 set @x=4;
end;
//

  deny  execute on test1 to studnet cascade 同理grant 属于权力的一种 
cascade=with grant option

call handlerdemo()//

  revoke 同理deny 表示撤除权限

select @x //
select @x2 //

种种操作汇总:

## ************光标****************
#<7>光标必须在注解管理程序以前被声称,并且变量和规范化必须在宣称光标或管理程序以前被声称
#在此地先表明变量a,b,c,后评释cursor
create procedure curdemo()
begin
 declare done int default 0;
 declare a char(16);
 declare b,c int;
 declare cur1 cursor for select id,name from proce;
 declare cur2 cursor for select id from proce2;
 declare continue handler for sqlstate ‘02000’ set done=1;
 
 open cur1;
 open cur2;

数据库操作:

 repeat
  fetch cur1 into b,a;
  fetch cur2 into c;
  if not done then
   if b<c then
     insert into proce3 values(b,a);
   else
     insert into proce3 values(c,a);
   end if;
  end if;
 until done end repeat;
 
 close cur1;
 close cur2;
end

新增:create database test; 

## **************** Case
*******************
#<8>when … then ;case … end case;
delimiter //
DROP procedure IF EXISTS p13
//
create procedure p13(in par1 int)
begin
 declare var1 int;
 set var1=par1+1;
 
 case var1
  when 0 then insert into casetest values(17);
  when 1 then insert into casetest values(18);
  else insert into casetest values(19);
 end case;
end;
//

删除:drop database if exists test1; 

call p13(-1)//
call p13(0)//
call p13(1)//
call p13(null)//

修改:alter database test1 default character set gb2312;

## **************** while
****************
#<9>while … do … end while;为了堤防null的荒谬,set
v=0是必须的
delimiter //
DROP procedure IF EXISTS p14
//

表操作:

create procedure p14()
begin
  declare v int;
  set v=0;
  while v < 5 do
      insert into casetest values (v);
      set v=v+1;
  end while;
end;//

一、和表结构等等有关:

call p14()//

查看:

## ***************** repeat
*****************
#<10>repeat …until … end repeat; 是施行后检查(until
v>=5),而while是施行前检查(while v<5)
delimiter //
DROP procedure IF EXISTS p15
//

desc table_name;  Or  show columns from table_name;

create procedure p15()
begin
  declare v int;
  set v=0;
  repeat
    insert into casetest values(v);
    set v=v+1;
  until v >=5

新增:

  end repeat;
 
end;
//

create table test(

call p15()//

a int not null default 0 primary key auto_increment CHECK (a>0),

## ***************** loops
*****************
#<11> loop
和while同样没有必要先河标准,同时和repeat同样没有要求收尾条件
 #      loop_label: loop
 #      …
 #       if .. then
 #       leave loop_label
 #       end if
 #      end loop

b char(10) not null,

delimiter //
DROP procedure IF EXISTS p16
//

c datetime,

create procedure p16()
begin
  declare v int;
  set v=0;
  loop_label: loop
    insert into casetest values(v);
    set v=v+1;
    if v >=5 then
      leave loop_label;
    end if;
  end loop;
end;//

CONSTRAINT chk_Person CHECK (b什么什么的 AND c
什么什么的)//这种是为着命名约束

call p16()//

//  CHECK (a>0)能够写在此间

## ***************** Labels
*****************
# <12>labels标号; 注意此处的until 0=0前面未有分号“;”
delimiter //
DROP procedure IF EXISTS p17//

);  //当约束坚守于两列以上时候要写在最后面

create procedure p17()
label_1:begin

更改(列):

label_2:while 0=1 do leave label_2; end while;

alter table test    //新增行

label_3:repeat leave label_3;until 0=0 end repeat;

add column d char(1) not null default ‘a’ after b; 

label_4:loop leave label_4; end loop;

//after能够换到first表示设为第一行(唯有那二种)

end;//

alter table test   

call p17()//

alter column c char(10); //修改行

#<13>labels 标号截至符;
delimiter //
DROP procedure IF EXISTS p18//

[alter column b set default ‘hello’;]  // 也足以修改私下认可值

create procedure p18()
label_1:begin

alter table test1

 label_2:while 0=1 do leave label_2; end while label_2;

    drop column b;  //删除行

 label_3:repeat leave label_3;until 0=0 end repeat label_3;

alter table test 

 label_4:loop leave label_4; end loop label_4;

    change column b e varchar(2) null default ‘啊’; 
//同有的时候间改列名和类型(将列名b改为e)

end label_1;//

alter table test

call p18()//

modify column b char(5) first;  //只修改数据类型
能够选用first恐怕after修改它的逐一

#<14>leave和labels 跳出和标记;leave 使程序跳出复杂的语句
delimiter //
DROP procedure IF EXISTS p19//

alter table test

create procedure p19(par char)

rename to test_backup //修改table名字

label_1:begin
label_2:begin
label_3:begin

重命名表:

 if par is not null then
 if par=’a’ then leave label_1;
 else
   begin
     if par=’b’ then
       leave label_2;
     else
       leave label_3;
     end if;
   end;
 end if;
 end if;

rename table test_backup to test;

end label_3;
end label_2;
end label_1;

复制表:

//

create table test_copy like test; //结构完全复制

call p19(‘a’)//

create table test_copy select * from test;  //将test作为结果集复制过去
不会复制约束和目录等

#<15>iterate迭代,必须用leave;iterate意思是重新伊始复合语句,约等于continue
#该结果中3将不被保留到数据库表中
delimiter //
997755.com澳门葡京,DROP procedure IF EXISTS p20//

create table test_copy as select * from test; //同上
能够用括号将as前边的东西包裹起来

create procedure p20()
begin
  declare v int;
  set v=0;
  loop_label:loop

删除表:

    if v=3 then
      set v=v+1;
      iterate loop_label;
    end if;
    insert into casetest values(v);
    set v=v+1;

drop table [if exists] test;  //表里的外键能够用cascade计策 例如: on
delete cascade 表示

    if v>=5 then
      leave loop_label;
    end if;

在父表上update/delete记录时,同步update/delete掉子表的相称记录

  end loop loop_label;
end;//

二、和数码有关:

call p20()//

插入:

#<16>Grand combination大组合

insert into test values(1,’潘冠宇’,’2017-03-18 16:52:00′);

delimiter //
DROP procedure IF EXISTS p21//

insert into test(a,b) values(1,’潘冠宇’);  //假若数据只插入有个别列
那么要在表名后用圆括号括起来

create procedure p21(in par1 int,out par2 int)
language sql deterministic sql security invoker
begin
  declare v int;

insert into test set 列名=值,列名=值; //只对想输入的列输入且主键非空 not
null自动赋值但会有warning

  label goto_label;

replace into test values(1,’张馨允’,’2017-03-18 16:52:00′); 

  start_label:loop
    if v=v then
      leave start_label;
    else
      iterate start_label;
    end if;
  end loop start_label;
 
  repeat
    while 1=0 do begin end;
    end while;
  until v=v
  end repeat;

//当要替换新闻的时候能够用replace改动除主键以外的音讯

  goto goto_label;

删除:

end;
//

delete from test where 列名=值;  //

call p21()//

delete [*] from test 或许 turncate test //均表示删除全体行 
还应该有一种从多少个表删除看书

## **************** trigger
***************************
#<17>
use testprocedure;

修改:

CREATE TABLE trig1(a1 int);
CREATE TABLE trig2(a2 int);
CREATE TABLE trig3(a3 int not null AUTO_INCREMENT PRIMARY KEY);

update test set j=1.22,g=’女’ where f=1;  //修改多列的时候用逗号

CREATE TABLE trig4(
  a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  b4 INT DEFAULT 0
);

用了ignore关键词在立异中有错误也不会中断

insert into trig3(a3)
values(null),(null),(null),(null),(null),(null),(null),(null),(null),(null);
insert into trig4(a4) values(0),(0),(0),(0),(0),(0),(0),(0),(0),(0);

查询:

delimiter //
DROP trigger trigtest//

select * from test;

create trigger trigtest before insert on trig1
for each row begin
  insert into trig2 set a2=NEW.a1;
  delete from trig3 where a3=NEW.a1;
  update trig4 set b4=b4+1 where a4=NEW.a1;
end;
//

select a,b from test;

delimiter ;

{–简单Case函数

INSERT INTO trig1 VALUES(1), (3), (1), (7), (1), (8), (4), (4);

case:

MySQL存款和储蓄进度例子,包蕴事务,参数,嵌套调用,游标,循环等 drop
procedur…

CASE sex

WHEN ‘1’ THEN ‘男’

WHEN ‘2’ THEN ‘女’

ELSE ‘其他’ END

–Case寻找函数

CASE WHEN sex = ‘1’ THEN ‘男’

WHEN sex = ‘2’ THEN ‘女’

ELSE ‘其他’ END}

select a,case b

when …  //能够使用上述的case函数 此为高档查询

select a,b from test where a like ‘我_%’; 
//%表示相称猖獗字符0到自由次数 下划线_意味着相当贰个任性字符
当列值有_的时候 必要转义字符#去除下划线_的特殊作用

regexp:

select * from test where a regexp ‘作者’;  //等同于where a like ‘%笔者%’
表示含有小编字的值

select distinct * from test where g regexp ‘哈博罗内|都城’;
表查询带有南京和福岛市的笔录

group by a  //表示通过a中的每一个值来分组

having 字句会对分组的过滤 比方count(*)<=3 那么通过group
by分组之后的就只取小于等于3的

select a,b from test order by c limit 4,3(limit 3 offset 4);
//limit表示限制从第5行开首的3行数据

在MySQL中 未有top n的用法 供给用limit对数码进行抉择 比方从0开头  limit
0,10

视图操作:

创建:

create view view_name as select column_name(s) from table_name where
condition [with check option] // with check option
用于钦点在可更新视图上的修改都要求满意select中所钦定的界定条件。

修改:  alter view…  //同成立同样

        // 视图的操作大多数和表同样 在插入数据的时候 当有check
option的挑选时 那么在插入的时候必须满意condition的规范例如:

插入: create view v as select * from test where age > 20 with check
option;

mysql> insert into v1(ssex) values(11); //如若在开创的时候有 with
check option

E帕杰罗ROENVISION 1369 (HY000): CHECK OPTION failed ‘test1.v1’
//那么在插入数据不满意创造的condition的时候就能够报错  并且主表也不会创建

// 若无加option  那么数据会插入到主表上 不过视图不会挑选这一条行记录
全部数据随时更新

删除:

drop view v1;

更新:

update v1 set a=’你好’;

目录操作:

创建:

1、 create index index_name on test.test(a,b) [using btree]; 
//在test数据库的test表对a和b列创建索引

2、 create table test(

a int not null primary key, //primary key也是贰个索引
是对本列声明非空的目录

b char(2),

name char(50),

index index_name(b),  //在创制表的时候能够同一时间创制索引 能够创设七个目录

constraint foreign key(name) references customers(name));

//外键也是一种索引 key日常是index的同义词

3、 alter table test add [constraint fk_name] foreign key(sno)
references student(sno);

//上边这一条是扩展外键约束 被参照的列必须是主键大概unique索引

alter table test add index index_name(a,b); //

查看:

show index from 表名;

删除:

alter table test drop index index_name,drop paimary key;

//不只怕直接用  drop index 索引名称; 那是正经SQL MYSQL不帮忙

积攒进程操作:

一、存储进度:

创建:

delimiter &&

create procedure sp_name(in/out/inout cid int,in csex char(1))

//  in/out/inout
代表三种参数,in表示输入参数,out表示输出参数,inout表示输入输出参数。

begin

update customers set cust_sex=csex where cust_id=cid;

end &&

delimiter ;

事件操作:

一、事件调节:

查看:

show variables like ‘event_scheduler’;

select @@event_scheduler;  //两种办法都能够查阅  结果为1也许on表示开启

开启:

set global event_scheduler=1;

set global event_scheduler=ture;  //经测量检验 这一条value不可以为true;

二、事件操作:

创建:

1、 delimiter &&

create event if not exists et

on schedule every 1 month //注意这里是 schedule 未有 【r】!!

// year quarter month day hour minute week second 等等

starts curdate() +interval 1 month

ends ‘2018-03-30’

do

begin

if year(curdate())<2018 then

insert into t1()

values(1,’你好’); //那几个事件的效用是 各种月向表t1插入一条数据

  end if; 该事件于前一个月尾叶 并且终结于二〇一八年5月30号。

end && 

2、 delimiter &&

create event t3

on schedule every 10 second

starts curdate() +interval 1 minute

ends ‘2017-03-21 21:50:00’  //可以确切到秒数

do

begin

insert into test(number) values(number+1);

end

&&

修改:

alter event et….  //打法和开创同样

alter event et disable; // 事件关闭

alter event et enable; //事件再次展开

alter event et rename to et1;  //事件改名

删去事件:

drop event if exists et;

触发器操作:

一、创立触发器(标准):

create triggerigger_name trigger_time trigger_event on tbl_name for
each row trigger_stmt

//trigger_time 有七个挑选分别是 before 和 after 表示触发器被触发的随时

// trigger_event钦点激活触发器的言语的门类:insert delete update

// trigger_body 可利用begin..end 复合语句结构

create trigger t after insert on t1 for each row set @str=’one customer
added!’;

删除:

drop trigger [if exists] trugger_name;

二、insert触发器(详解):

//也能够被load data触发 均代表新增增加少

create trigger insert_trigger after insert on customers for each row
set @str=new.id;

//往t2插入数据的时候往对应的t1表中追加人口

delimiter &&

create trigger tr1 after insert

on t2 for each row

begin

declare a int;

set a=(select count from t1 where sno=new.sno);

update t1 set count=a+1 where sno=new.sno;

end && 

三、delete和update

//update和delete触发器写法于insert一模二样在trigger_time和trigger_event上有所区别

再便是在行使old和new一时表的两样

//old上保存已去除的多寡记录  new保存将要履新的多寡,包含insert和update

当提到自己表的翻新的时候 只好动用before update触发器 而
after触发器不被允许

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website