mysql触发器存储过程
这个问题的描述太简单了,意思不太明白啊。。a表插入后,b,c表有什么改变啊?a表插入对b,c表没有影响吗??
‘贰’ Mysql触发器或存储过程中能否调用dll
使用非SQL格式dll,也就是平时所写的,如果打死也不明白就用他就可以。
dll需要事先先注册,
注册是:regsvr32 名字.dll
卸载是:regsvr32 /u 名字.dll
[vb] view plain
CREATE TRIGGER [名称] ON [表名]
AFTER INSERT, UPDATE, DELETE
AS
DECLARE @hr int
DECLARE @obj int
DECLARE @out varchar(200)
exec @hr = sp_oacreate '[名称空间|工程名].[类名]', @obj out
IF @hr = 0
BEGIN
exec @hr = sp_oamethod @obj,'[函数名]',@out output,'[参数1]','[参数2]',...'[参数N]'
if @hr = 0
BEGIN
print @out
END
END
使用SQL格式的DLL
以下这代码要放到master数据库执行
[c-sharp] view plain
CREATE PORC [名字] AS
BEGIN
DECLARE @out varchar(200)
EXEC exec sp_addextendedproc '[函数名]', '[名称空间|工程名
.dll' --添加dll进来
EXEC @out = [函数名] [参数1] [参数2] ... [参数N] --注意:函数名前不能用@函数名和参数之间,参数和参数之间,不能用,,我用过,报错了...
EXEC exec sp_sp_dropextendedproc'[函数名]' --这里就是卸载了
直接执行外部程序,例如exe,黑客爱好这代码
上面的代码黑客也爱好,为什么?我才不会告诉你他喜欢用sp_addextendproc来加载xp_cmdshell
[c-sharp] view plain
--以下代码不是顺序执行,只是说明
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE; -- 开启xp_cmdshell,几乎不需要执行,多数人不会主要到
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE; -- 这自然是关闭喽,要做啥非法事的话,就不要执行这句。
EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int --这句是如果不能执行xp_cmdshell时候,例如报127错误时修复使用
sp_addextendedproc 'xp_cmdshell','xpsql70.dll' -- 同上
--以下是使用xp_comshell
--有返回值
DECLARE @out int
EXEC @out = xp_cmdshell '[文件名]' '[参数1]' '[参数2]' ... '[参数N]'
无返回值
EXEC xp_comshenll'[文件名]' '[参数1]' '[参数2]' ... '[参数N]',no_output
‘叁’ 如何用mysql触发器调用存储过程
这个性能问题很多都是相对的,譬如如果你不用存储过程,那应用服务器和数据库服务器的交互就会增多,这样也导致性能降低。一般而言,存储过程的使用降低应用的负载,更多的要考虑使用的合理性。譬如触发器过多也会影响你操作表的速度,因而你应该根据系统自身情况去分析设计
‘肆’ 如何测试mysql触发器和存储过程
1.
为了测试触发器和存储过程,首先建立一张简单的表:
复制代码
代码如下:
CREATE
TABLE
`airuser`
(
`userId`
int(11)
NOT
NULL
AUTO_INCREMENT,
`username`
varchar(128)
NOT
NULL,
PRIMARY
KEY
(`userId`)
)ENGINE=InnoDB
DEFAULT
CHARSET=utf8
2.
为该表的插入操作,创建一张记录表:
复制代码
代码如下:
CREATE
TABLE
`airuser_record`
(
`id`
int(11)
NOT
NULL
AUTO_INCREMENT,
`username`
varchar(45)
DEFAULT
NULL,
`edittime`
timestamp
NULL
DEFAULT
NULL,
`edittype`
varchar(45)
DEFAULT
NULL,
PRIMARY
KEY
(`id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
3.
编写一个插入操作的触发器:
复制代码
代码如下:
DROP
TRIGGER
insert_trigger;
delimiter
|
CREATE
TRIGGER
insert_trigger
BEFORE
INSERT
ON
airuser
FOR
EACH
ROW
BEGIN
INSERT
INTO
airuser_record
SET
username
=
NEW.username,
edittime=now(),
edittype='insert';
END;
SHOW
TRIGGERS;
4.
为批量插入编写存储过程:
复制代码
代码如下:
DROP
procere
createUsers;
delimiter
|
create
procere
createUsers(IN
count
int)
begin
declare
i
int;
set
i=0;
while
i<count
do
insert
into
airuser
set
username=concat('user_',i);
set
i=i+1;
end
while;
end;
show
procere
status;
5.
调用存储过程,验证存储过程是工作的,并验证在插入记录前,触发器能正确被触发:
复制代码
代码如下:
call
createUsers(10);
6.
最后通过插入记录表再次验证:
复制代码
代码如下:
SELECT
*
FROM
mars_jpa.airuser_record;
‘伍’ mysql!触发器里如何调用存储过程。
call showChildLst(new.pn,new.pa)
‘陆’ 求大神 mysql 中利用触发器调用存储过程 不能执行动态Sql
如果你用存储过程的代码替换掉呢。
‘柒’ 如何加密MYSQL触发器和存储过程
1 人员管理好。
2 改换成就写在应用里面
‘捌’ Mysql 触发器 和 存储过程
我就给你描述一下简单易懂的吧,第一个存储过程,例子:输入一个 名字,返回改名字的人的 居住地址!代码:create procere 过程名字( name varcha2) is
v varchar2(100);
begin
select s_address into v from 表 where s_name= name;
dbms_output.put_line('该名字居住的地址是:|| v');
end; 这个存储过程的。比较简单。的例子。
触发器,指的是:可以限制你往表里添加数据,比如,我建立触发器,比如不让你在当天的12:00:00之,对你的这个表进行操作。具体代码:
create or replace trigger 触发器名字
before update or insert or delete
on 你的表
declare v_date date;
begin
select sysdate into v_date from al;
if(v_date<to_date('2012-11-16 12:00:00','yyyy-mm-dd hh24:mi:ss'))
then dbms_output.put_line('这个时间不可以更改数据');
end if;
end;
我都亲自测试的。呵呵 ,这样如果你在12之前对表进行,曾删改,就会报出‘这个时间不可以改数据的’字样。我的例子通熟易懂,希望给点分。呵呵,不会的咱俩可以研究。
‘玖’ mysql5,触发器里可以调用存储过程吗
不能吧
create trigger del_stu_for_del_tb_pergi
before delete on tb_perdorm
for each row
begin
declare stucodn varchar(15);
set stucodn = old.stu_codename;
call in_out_Per(1,stucodn,'getout');
end $$
Dynamic SQL is not allowed in stored function or trigger
动态SQL是不允许在触发器中
貌似是这样 英语比较搓!!!