精华内容
下载资源
问答
  • mysql触发器删除数据
    2022-05-13 21:08:25

    Mysql创建触发器-删除一条数据的同时将这条数据添加进备份表

    CREATE TRIGGER removed_products_trigger AFTER DELETE ON product_info
        FOR EACH ROW BEGIN INSERT INTO removed_products(code,name,tid,brand,pic,num,price,intro)
        values(OLD.code,OLD.name,OLD.tid,OLD.brand,OLD.pic,OLD.num,OLD.price,OLD.intro); END

    更多相关内容
  • 本文将介绍mysql 触发器实现两个表的数据同步,需要的朋友可以参考
  • mysql触发器实现表格同步

    起因

    开发过程中偶尔会出现一种场景,两个不同服务间的数据库表格内容需要保持一致。由于要保持服务本身的独立性,不太适合使用同一个数据库。这个时候可以考虑同步数据库内容。触发器恰好可以起到这样的作用,只要写增、删、改三个触发器便可。
    触发器只需写在源表内,可将更新同步至目标表。

    语法

    DELIMITER $
    create trigger <触发器名> after <操作名(insert、delete、update)> on <源表名> for each row
    begin
    <sql语句>
    END $;
    DELIMITER ;
    

    增加(insert)

    在触发器里面有两个关键字 old和new,在insert操作的时候我们使用的是new

    DELIMITER $
    create trigger user_insert after insert on upms_user for each row
    begin
    INSERT INTO `storage`.upms_user(id,username,create_time,creator,update_time,updater) 
    VALUES(new.id,new.username,new.create_time,new.creator,new.update_time,new.updater);
    END $;
    DELIMITER ;
    

    删除(delete)

    在where条件语句中我们需要使用的是关键字old

    DELIMITER $
    CREATE TRIGGER user_delete AFTER DELETE ON upms_user FOR EACH ROW
    BEGIN
    DELETE FROM `storage`.upms_user WHERE id=old.id;
    END $;
    DELIMITER ;
    

    更新(update)

    此处要注意的是,我们在字段赋值时使用的时new,在where条件中使用的old。

    DELIMITER $
    CREATE TRIGGER user_update AFTER UPDATE ON upms_user FOR EACH ROW
    BEGIN
    UPDATE `storage`.upms_user SET username=new.username,create_time=new.create_time,creator=new.creator,
    update_time=new.update_time,updater=new.updater where id=old.id;
    END $;
    DELIMITER ;
    

    navicat创建触发器示例

    在这里插入图片描述
    右击需要数据源表格,选择设计表->触发器,输入触发器名称,触发方式(After、Before),触发操作(insert、delete、update),然后在下方定义处写对应的操作即可

    展开全文
  •  在MySQL数据库中,数据库对象表是存储和操作数据的逻辑结构,而数据库对象触发器则用来实现由一些表事件触发的某个操作。在数据库系统中,当执行表事件时,则会激活触发器,从而执行器包含的操作。触发器的操作...
  • MySQL删除数据

    千次阅读 2021-01-28 00:39:21
    在本教程中,您将学习如何使用MySQL DELETE语句从单个表中删除数据。1. MySQL DELETE语句介绍要从表中删除数据,请使用MySQL DELETE语句。下面说明了DELETE语句的语法:DELETE FROM table_nameWHERE condition;在...

    在本教程中,您将学习如何使用MySQL DELETE语句从单个表中删除数据。

    1. MySQL DELETE语句介绍

    要从表中删除数据,请使用MySQL DELETE语句。下面说明了DELETE语句的语法:

    DELETE FROM table_name

    WHERE condition;

    在上面查询语句中 -

    首先,指定删除数据的表(table_name)。

    其次,使用条件来指定要在WHERE子句中删除的行记录。如果行匹配条件,这些行记录将被删除。

    请注意,WHERE子句是可选的。如果省略WHERE子句,DELETE语句将删除表中的所有行。

    除了从表中删除数据外,DELETE语句返回删除的行数。

    要使用单个DELETE语句从多个表中删除数据,请阅读下一个教程中将介绍的DELETE JOIN语句。

    要删除表中的所有行,而不需要知道删除了多少行,那么应该使用TRUNCATE TABLE语句来获得更好的执行性能。

    对于具有外键约束的表,当从父表中删除行记录时,子表中的行记录将通过使用ON DELETE CASCADE选项自动删除。

    2. MySQL DELETE的例子

    我们将使用示例数据库(yiibaidb)中的employees表进行演示。

    +-------------+--------------+------+-----+---------+----------------+

    | Field | Type | Null | Key | Default | Extra |

    +-------------+--------------+------+-----+---------+----------------+

    | emp_id | int(11) | NO | PRI | NULL | auto_increment |

    | emp_name | varchar(255) | NO | | NULL | |

    | performance | int(11) | YES | MUL | NULL | |

    | salary | float | YES | | NULL | |

    +-------------+--------------+------+-----+---------+----------------+

    4 rows in set

    请注意,一旦删除数据,它就会永远消失。因此,在执行DELETE语句之前,应该先备份数据库,以防万一要找回删除过的数据。

    假设要删除officeNumber为4的员工,则使用DELETE语句与WHERE子句作为以下查询:

    DELETE FROM employees

    WHERE

    officeCode = 4;

    要删除employees表中的所有行,请使用不带WHERE子句的DELETE语句,如下所示:

    DELETE FROM employees;

    在执行上面查询语句后,employees表中的所有行都被删除。

    MySQL DELETE和LIMIT子句

    如果要限制要删除的行数,则使用LIMIT子句,如下所示:

    DELETE FROM table

    LIMIT row_count;

    请注意,表中的行顺序未指定,因此,当您使用LIMIT子句时,应始终使用ORDER BY子句,不然删除的记录可能不是你所预期的那样。

    DELETE FROM table_name

    ORDER BY c1, c2, ...

    LIMIT row_count;

    考虑在示例数据库(yiibaidb)中的customers表,其表结构如下:

    mysql> desc customers;

    +------------------------+---------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +------------------------+---------------+------+-----+---------+-------+

    | customerNumber | int(11) | NO | PRI | NULL | |

    | customerName | varchar(50) | NO | | NULL | |

    | contactLastName | varchar(50) | NO | | NULL | |

    | contactFirstName | varchar(50) | NO | | NULL | |

    | phone | varchar(50) | NO | | NULL | |

    | addressLine1 | varchar(50) | NO | | NULL | |

    | addressLine2 | varchar(50) | YES | | NULL | |

    | city | varchar(50) | NO | | NULL | |

    | state | varchar(50) | YES | | NULL | |

    | postalCode | varchar(15) | YES | | NULL | |

    | country | varchar(50) | NO | | NULL | |

    | salesRepEmployeeNumber | int(11) | YES | MUL | NULL | |

    | creditLimit | decimal(10,2) | YES | | NULL | |

    +------------------------+---------------+------+-----+---------+-------+

    13 rows in set

    例如,以下语句按客户名称按字母排序客户,并删除前10个客户:

    DELETE FROM customers

    ORDER BY customerName

    LIMIT 10;

    类似地,以下DELETE语句选择法国(France)的客户,按升序按信用额度(creditLimit)进行排序,并删除前5个客户:

    DELETE FROM customers

    WHERE country = 'France'

    ORDER BY creditLimit

    LIMIT 5;

    在本教程中,您已经学会了如何使用MySQL DELETE语句从表中删除数据。

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • 再写程序去弄的话,流程上比较麻烦,而且也没必要,故采用触发器的方式去实现,等用户部署稳定版后再把触发器删除即可。  具体sql参考下图,主要逻辑为根据t_account表的增删改去更新A表和B表的记录。(为啥是图片,...
  • mysql触发器

    2021-01-19 21:32:11
    什么是触发器简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行;特点及作用特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子性,要么全部...

    什么是触发器

    简单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行;

    特点及作用

    特点:触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子性,要么全部执行,要么都不执行;

    作用:保证数据的完整性,起到约束的作用;

    例子:创建触发器,记录表的增、删、改操作记录

    接下来将创建user和user_history表,以及三个触发器tri_insert_user、tri_update_user、tri_delete_user,分别对应user表的增、删、改三件事;

    创建user表;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    DROP TABLE IF EXISTS `user`;

    CREATE TABLE `user` (

    `id` bigint(20) NOT NULL AUTO_INCREMENT,

    `account` varchar(255) DEFAULT NULL,

    `name` varchar(255) DEFAULT NULL,

    `address` varchar(255) DEFAULT NULL,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    创建对user表操作历史表;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    DROP TABLE IF EXISTS `user_history`;

    CREATE TABLE `user_history` (

    `id` bigint(20) NOT NULL AUTO_INCREMENT,

    `user_id` bigint(20) NOT NULL,

    `operatetype` varchar(200) NOT NULL,

    `operatetime` datetime NOT NULL,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    创建user表插入事件对应的触发器tri_insert_user;

    几点说明:

    DELIMITER:改变输入的结束符,默认情况下输入结束符是分号;,这里把它改成了两个分号;;,这样做的目的是把多条含分号的语句做个封装,全部输入完之后一起执行,而不是一遇到默认的分号结束符就自动执行;

    new:当触发插入和更新事件时可用,指向的是被操作的记录

    old: 当触发删除和更新事件时可用,指向的是被操作的记录

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    DROP TRIGGER IF EXISTS `tri_insert_user`;

    DELIMITER ;;

    CREATE TRIGGER `tri_insert_user` AFTER INSERT ON `user` FOR EACH ROW begin

    INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (new.id, 'add a user', now());

    end

    ;;

    DELIMITER ;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    创建user表更新事件对应的触发器tri_update_user;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    DROP TRIGGER IF EXISTS `tri_update_user`;

    DELIMITER ;;

    CREATE TRIGGER `tri_update_user` AFTER UPDATE ON `user` FOR EACH ROW begin

    INSERT INTO user_history(user_id,operatetype, operatetime) VALUES (new.id, 'update a user', now());

    end

    ;;

    DELIMITER ;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    创建user表删除事件对应的触发器tri_delete_user;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    DROP TRIGGER IF EXISTS `tri_delete_user`;

    DELIMITER ;;

    CREATE TRIGGER `tri_delete_user` AFTER DELETE ON `user` FOR EACH ROW begin

    INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (old.id, 'delete a user', now());

    end

    ;;

    DELIMITER ;

    48304ba5e6f9fe08f3fa1abda7d326ab.png

    至此,全部表及触发器创建完成,开始验证结果,分别做插入、修改、删除事件,执行以下语句,观察user_history是否自动产生操作记录;

    INSERT INTO user(account, name, address) VALUES ('user1', 'user1', 'user1');

    INSERT INTO user(account, name, address) VALUES ('user2', 'user2', 'user2');

    UPDATE user SET name = 'user3', account = 'user3', address='user3' where name='user1';

    DELETE FROM `user` where name = 'user2';

    观察结果user表和user_history表的结果,操作记录已产生,说明触发器工作正常;

    15ddcc034fb8b9bb60f1da6919c719e9.png

    弊端

    增加程序的复杂度,有些业务逻辑在代码中处理,有些业务逻辑用触发器处理,会使后期维护变得困难;

    触发器的基本形式:

    1 CREATETRIGER trigger_name2 {BEFORE | AFTER} {INSET | UPDATE | DELETE} ON table

    3 [order]

    4 FOREACH ROW5 BEGIN

    6 ...7 END

    ①for each row 表示该触发器将对每一个受影响的行进行操作

    ②可选的order子句支持在特定时机/事件组合的前提下,指定运行多个触发器。格式:{FOLLOWS | PRECEDES} other_trigger

    ③before insert 表示 在插入之前触发,执行begin end中的程序体。

    举个栗子:

    1 #triggerexample2

    3 DELIMITER $$4

    5 CREATE TRIGGERtrig_Delete_Order_Items6 BEFORE DELETE ONOrders7 FOREACH ROW8 BEGIN

    9 DELETE FROM Order_Items WHERE OLD.OrderID =OrderID;10 END

    11 $$12

    13 DELIMITER ;

    OLD表示 在调用查询运行前使用该列值,可以理解为删除前的值。

    相对INSERT触发器中使用NEW关键字,UPDATE触发器有OLD 和 NEW关键字.

    展开全文
  • 1. 创建一个数据表 order_1,同时复制出一份表order_2表结构如下:CREATE TABLE a_order_1 (order_id int(11) NOT NULL AUTO_INCREMENT,order_sn varchar(100) DEFAULT NULL,user_nick varchar(100) DEFAULT NULL,...
  • I need to use trigger for one of my database this is offer data tableCREATE TABLE IF NOT EXISTS offer_detail ( id int(60) NOT NULL AUTO_INCREMENT,company_id int(60) NOT NULL,offertype_id int(60) NOT N...
  • CREATE TRIGGER 触发器名称 BEFORE DELETE ON 删除的主表名称 FOR EACH ROW BEGIN INSERT INTO 备份表名称 SELECT * FROM 主表名称 where id=old.id; END
  • 3个触发器的功能都是一样的,数据新增、更新、删除重新统计数据更新到另一张表。
  • MySQL触发器

    2021-01-21 17:13:37
    触发器MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):DELETE;INSERT;UPDATE;其他MySQL语句不支持触发器。创建触发器在创建触发器时,需要给出4条信息:唯一的触发器名...
  • 【代码】mysql 触发器 同步表数据 统计表数据
  • 1.迁移数据进行数据库移植,SQL Server=>MySQL。SQL Server上有如下的TriggerSET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ONGOALTER TRIGGER [trg_risks] ON dbo.projectriskFOR INSERT, UPDATEASBEGINUPDATE ...
  • MySQL触发器语法详解:  触发器 trigger是一种特殊的存储过程,他在插入(inset)、删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力。触发器不是由...
  • 1.迁移数据进行数据库移植,SQL Server=>MySQL。SQL Server上有如下的TriggerSET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ONGOALTER TRIGGER [trg_risks] ON dbo.projectriskFOR INSERT, UPDATEASBEGINUPDATE ...
  • mysql 触发器使用详解

    千次阅读 多人点赞 2022-08-01 15:55:49
    mysql 触发器使用详解
  • MySQL触发器详解

    千次阅读 2021-12-21 23:19:11
    今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL触发器相关知识。 一、触发器简介 触发器是一种特殊的存储过程,在定义触发器时会定义触发器的触发条件,使得触发器在满足触发条件时自动执行而不需要认为调用...
  • MySQL 触发器

    2022-07-14 16:35:31
    在实际开发中,我们经常会遇到这样的情况有2个或者多个相互关联的表,如商品信息和库存信息分别存放在2个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性...这个时候,咱们可以使用触发器。...
  • 本文:同一服务器,同一个数据库,从tableA表同步部分数据到tableB表。同一个服务器,不同数据库之间同步tableA与tableB,点这里。不同服务器,不同数据库之间同步tableA与tableB,点这里。1.触发器的基本结构 首先...
  • MySQL触发器示例0写在之前:最近在带浙大本科生的数据库系统的上机课,我手里拿到的教学文档非常的老,本人及不习惯老文档里的sql server的操作,就让大家安装的MySQL,这就有了个问题:MySQL上很多SQLserver的操作...
  • 触发器的概念 当我们对一个表进行数据操作时,需要同步对其它的表执行相应的操作...MySQL从5.0.2版本开始支持触发器。 创建触发器MySQL中创建触发器通过SQL语句CREATE TRIGGER来实现,其语法形式如下: CR...
  • 有人可以为我提供一个mysql 5触发器创建代码,当我的表中的行总数达到y时,该代码将允许我删除表中的前x个行吗?谢谢解决方法:您无法在触发触发器的同一表上执行任何CRUD操作…因此,无法在表上使用触发器来完成此操作...
  • mysql触发器的例子,代码如下:mysql> CREATE TABLE Employee( //创建表-> id int,-> first_name VARCHAR(15),-> last_name VARCHAR(15),-> start_date DATE,-> end_da...
  • 创建新的顾客时,他们会将有关他们的一些信息存储到第二张表中(这也使用触发器完成,它可以按预期工作)。这是我的表结构和关系的示例。表1-> 顾客+-----+---------+-----++ id + name + val ++=====+=========+==...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,095
精华内容 19,638
关键字:

mysql触发器删除数据

mysql 订阅