精华内容
下载资源
问答
  • 简介:这是php批量生成mysql触发器定义语句的详细页面,介绍了和php,有关知识、技巧、经验,和一些php源码等。 class='pingjiaF' frameborder='0' src='...

    简介:这是php批量生成mysql触发器定义语句的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。 class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=333669' scrolling='no'>

    define('TRIGGER_AFTER_INSERT_SQL',"DELIMITER |

    DROP TRIGGER IF EXISTS %s;

    CREATE TRIGGER %s

    AFTER INSERT ON %s

    FOR EACH ROW BEGIN

    SET @result_set = (select clear_cache());

    END |

    DELIMITER ;\r\n\r\n");

    define('TRIGGER_AFTER_UPDATE_SQL',"DELIMITER |

    DROP TRIGGER IF EXISTS %s;

    CREATE TRIGGER %s

    AFTER UPDATE ON %s

    FOR EACH ROW BEGIN

    SET @result_set = (select clear_cache());

    END |

    DELIMITER ;\r\n\r\n");

    define('TRIGGER_AFTER_DELETE_SQL',"DELIMITER |

    DROP TRIGGER IF EXISTS %s;

    CREATE TRIGGER %s

    AFTER DELETE ON %s

    FOR EACH ROW BEGIN

    SET @result_set = (select clear_cache());

    END |

    DELIMITER ;\r\n\r\n");

    mysql_connect('127.0.0.1:3307','root','') or die(mysql_error());

    mysql_select_db('db');

    mysql_query('SET NAMES UTF8');

    $triggerDDL = '';

    $rs = mysql_query('SHOW TABLES');

    while($row = mysql_fetch_array($rs))

    {

    $tblName = $row['Tables_in_db'];

    $triggerDDL .= "\r\n--\r\n-- 表的触发器 `".$tblName."`\r\n--\r\n";

    $triggerName = $tblName.'_insert';

    $triggerDDL .= sprintf(TRIGGER_AFTER_INSERT_SQL,$triggerName,$triggerName,$tblName);

    $triggerName = $tblName.'_update';

    $triggerDDL .= sprintf(TRIGGER_AFTER_UPDATE_SQL,$triggerName,$triggerName,$tblName);

    $triggerName = $tblName.'_delete';

    $triggerDDL .= sprintf(TRIGGER_AFTER_DELETE_SQL,$triggerName,$triggerName,$tblName);

    }

    file_put_contents('db_trigger.sql',$triggerDDL);

    ?>

    展开全文
  • 怎样用phpsql语句在mysql数据库中创建触发器:首先介绍一下数据库触发器:数据库触发器是指附加在一个数据库一张表上一个自动事件,比如在对一张表进行一个操作时,触发了已经定义好触发器。...

    怎样用php的sql语句在mysql数据库中创建触发器:

    首先介绍一下数据库的触发器:数据库的触发器是指附加在一个数据库的一张表上的一个自动的事件,比如在对一张表进行一个操作时,触发了已经定义好的触发器。那么这个触发器就会自动的执行。

    用php的sql语句在数据库中创建的实例:1.选中一个数据库:用use 数据库名 即可;2.运行这个sql语句:create trigger trigger_name before or after insert(说明这是事件) or update or select on 表名 for each row 执行你想执行的语句。

    比喻有一个表为student_test 和一个表 trigger_test,在每次添加内容到表student_test时执行一个操作添加时间到表trigger_test 的实例:

    我可以这样写:create trigger trigger_test after insert on student_test for each row insert into trigger_test values(time());

    当然这里是假设trigger_test表是只有一个存时间的字段了。

    谢谢 说完了,希望对您有帮助。

    展开全文
  • SQL触发器 常用语句

    2018-12-05 12:09:16
    一、创建一个简单的触发器 CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT、UPDATE 或 DELETE AS  T-SQL 语句 注意:触发器名称是不加引号。   二、删除触发器 drop trigger 触发器名称 ...

    随笔- 689  文章- 3  评论- 24 

    SQL触发器 常用语句

    一、创建一个简单的触发器

    CREATE TRIGGER 触发器名称

    ON 表名

    FOR INSERT、UPDATE 或 DELETE

    AS

        T-SQL 语句

    注意:触发器名称是不加引号的。

     

    二、删除触发器

    drop trigger 触发器名称

    删除多个触发器:drop trigger 触发器名称,触发器名称

     

    三、重命名触发器

    用查询分析器重命名

    exec sp_rename 原名称, 新名称

    sp_rename 是 SQL Server? 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。

     

    四、INSERT、UPDATE 或 DELETE

     

    INSTEAD OF

    执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例:

    create trigger f

    on tbl

    instead of delete

    as

        insert into Logs...

     

    IF UPDATE(列名)

    检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:

    create trigger f

    on tbl

    for update

    as

        if update(status) or update(title)

            sql_statement --更新了 status 或 title 列

     

    inserted、deleted

    这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。例:

    create trigger tbl_delete

    on tbl

    for delete

    as

        declare @title varchar(200)

        select @title=title from deleted

        insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')

    说明:如果向 inserted 或 deleted 虚拟表中取字段类型为 text、image 的字段值时,所取得的值将会是 null。

     

    五、查看数据库中所有的触发器

    use 数据库名

    go

    select * from sysobjects where xtype='TR'

    sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。

     

    六、sp_helptext 查看触发器内容

     

    use 数据库名

    go

    exec sp_helptext '触发器名称'

     

    七、sp_helptrigger 用于查看触发器的属性

    sp_helptrigger 有两个参数:第一个参数为表名;第二个为触发器类型,为 char(6) 类型,可以是 INSERT、UPDATE、DELETE,如果省略则显示指定表中所有类型触发器的属性。

     

    例:

     

    use 数据库名

    go

    exec sp_helptrigger tbl

     

    八、递归、嵌套触发器

    递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称分别为 T1、T2,在 T1、T2 上分别有触发器 G1、G2。

     

    间接递归:对 T1 操作从而触发 G1,G1 对 T2 操作从而触发 G2,G2 对 T1 操作从而再次触发 G1...

    直接递归:对 T1 操作从而触发 G1,G1 对 T1 操作从而再次触发 G1... 

    嵌套触发器

     

    类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以 T1->T2->T3...这样一直触发下去,最多允许嵌套 32 层。

     

    设置直接递归

     

    默认情况下是禁止直接递归的,要设置为允许有两种方法:

     

    T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true

    EM:数据库上点右键->属性->选项。 

    设置间接递归、嵌套

     

    默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:

     

    T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许

    EM:注册上点右键->属性->服务器设置。 

     

    九、触发器回滚

    我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。

     

    use 数据库名

    go

    create trigger tr

    on 表名

    for update

    as

        if update(userName)

            rollback tran

     

    关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。

     

    十、禁用、启用触发器

    禁用:alter table 表名 disable trigger 触发器名称

    启用:alter table 表名 enable trigger 触发器名称

     

    如果有多个触发器,则各个触发器名称之间用英文逗号隔开。

     

    如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。

    标签: sql触发器语句

    好文要顶 关注我 收藏该文  

    书写者
    关注 - 34
    粉丝 - 133

    +加关注

    0

    0

    » 下一篇:sql:快速删除数据库中所有表中的数据

    https://www.cnblogs.com/accumulater/articles/6064639.html

     

     

    展开全文
  • 创建触发器的语句和报错信息 问题原因和解决方案: 仔细检查很久,并没有发现创建触发器的语句有什么问题。然后去MySQL官网查看,看到这段说明: 如官网这段文字所述,使用BEGIN … END构造,如果使用mysql程序...
    • 问题描述:
      创建触发器的语句和报错信息
      在这里插入图片描述
    • 问题原因和解决方案:

    仔细检查很久,并没有发现创建触发器的语句有什么问题。然后去MySQL官网查看,看到这段说明:
    在这里插入图片描述
    如官网这段文字所述,使用BEGIN … END构造,如果使用mysql程序定义执行多个语句的触发器,则必须重新定义mysql语句定界符。
    因SQL语句中存在分号 “;”,而MySQL默认的定界符也是分号,故容易出现符号混淆,导致MySQL语句执行异常。

    • 创建触发器的正确语句
      在这里插入图片描述
      注:因为该触发器已存在,故而执行后提示“Trigger already exists”。
    展开全文
  • mysql创建触发器时报1064错误

    千次阅读 2019-12-15 23:12:26
    1.这里有两张表,book和enterbook,book表中的bookid是enterbook的外键,这里想创建一个insert触发器,...2.通常百度的mysql创建触发器的语句是这样的, CREATE TRIGGER  触发器名  BEFORE (AFTER)  触发事...
  • 触发器 1是一种特殊的存储过程 ...触发器的类型 1DML触发器 DML触发器由DML语句触发,如insert,update,delete语句 )DML触发器按触发事件分类 01)before触发器:在DML事件发生之前采取行动 02)after触发器:...
  • 在本教程中,将学习如何使用SQL Server CREATE TRIGGER语句创建的触发器。SQL Server CREATE TRIGGER语句简介CREATE TRIGGER语句用于创建一个新的触发器,只要针对表发生INSERT,DELETE或UPDATE等事件,就会自动...
  • 1创建触发器 create trigger 触发器名称 on 表名 for delete,update,insert --触发条件可多选或单选 as T-SQL语句 2删除触发器 drop trigger 触发器名称[,...] 3重命名触发器 用查询分析器重命名 exec sp_...
  • 随便搜集了一点觉得还挺全面 创建触发器,触发器是一种特殊存储过程,在用户试图对指定表执行指定数据修改语句时自动执行。Microsoft® SQL Server™ 允许为任何给定 INSERT、UPDATE 或 DELETE 语句创建多...
  • 在我应用程序迁移文件的创建过程中,我注意到Laravel不支持数据库触发器!我已经接受了这样一个事实:我需要执行一个查询语句来实现这一点,但这也给了我麻烦..这是我应用程序代码片段:Schema::create('users',...
  • Oracle创建触发器

    2018-12-15 17:21:03
    文章目录1.说明2.类型3.创建触发器语法4....每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。 触发器可用于 数据确认 实施复杂的安全性检...
  • MySQL中的触发器是由insert、update和delete等事件来触发某种特定操作,满足触发器的触发条件,数据库就会执行触发器中定义的程序语句,并且触发器的执行语句可能只有一个,也可能有多个。那怎么实现创建触发器,...
  • navcat 创建触发器的时候老是报错can't create a trigger from within another stored routine 。原来是不能重复的写建立语句,修改如下 begin和end中间就是普通的sql语句,如果不确定你要实现的sql的正确性的话...
  • 创建触发器

    2008-07-08 15:31:42
    创建触发器,触发器是一种特殊存储过程,在用户试图对指定表执行指定数据修改语句时自动执行。Microsoft? SQL Server? 允许为任何给定 INSERT、UPDATE 或 DELETE 语句创建多个触发器。 语法 CREATE ...
  • MySQL 创建触发器

    2020-03-14 09:47:01
    触发器是与 MySQL 数据表...在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下: CREATE <触发器名> < BEFORE | AFTER > <INSERT | UPDATE | DELETE > ON <表名> ...
  • 触发器可以简单理解一种特殊的存储过程,之前存储过程的变量定义及流程语句同样适合触发器,唯一不同的是我们只需要定义触发器,而不用手动调用触发器。...创建触发器的语法如下: CREATE TRIGGER trigger_n.
  • 触发器的动作时间有BEFOR和AFTER,这表示在数据库表的某一行发生修改事件之前或之后调用。触发器三个事件:INSERT,DELETE 和 UPDATE。INSERT:表示通过INSERT,REPLACE或LOAD DATE插入一行时调用触发器UPDATE:表示...
  • 本文实例讲述了mysql触发器简介、创建触发器及使用限制。分享给大家供大家参考,具体如下: 简介 SQL触发器是存储在数据库目录中一组SQL语句。每当与表相关联事件发生时,即会执行或触发SQL触发器,例如插入,...
  • MySQL触发器资料整理创建触发器及查看、删除触发器 一、什么是触发器 1、触发器是一种特殊存储过程,它执行不是由程序调用,也不是手工启动,而是通过事件来触发,比如对一个表进行操作(insert,delete,...
  • 动态创建触发器

    2018-11-15 13:42:30
    触发器在我认识当中是通过数据库直接建立,最近接到一个开发任务,需要动态创建触发器建立在代码中;大写一脸懵逼啊~~~~ 现在对这次开发做一次记录。好记心不如烂笔头,每天进步一点点。 在其中涉及到查询...
  • 1、创建触发器并使用dblink在插入时进行数据同步异库异表同步create or replace trigger triggerName --触发器名称 after insert on tableName --操作表 for each row ——行级触发器 declare --这里是关键地方...
  • sybase 创建触发器

    2019-10-08 14:09:11
    触发器可自动操作。只要数据发生修改(无论是数据录入人员进行数据录入还是应用程序进行操作),触发器就会工作...以下创建一个history_record_bak表的触发器 create trigger t1onhistory_record_bakfor insert,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,199
精华内容 879
关键字:

创建触发器的语句是