当前位置: 首页 > news >正文

一起做网店app下载企业网站优化

一起做网店app下载,企业网站优化,中文域名到期对网站的影响,聊城优化seo文章目录 1.简介2.行级与语句级触发器3.触发时机4.触发器优缺点5.创建触发器语法示例 6.查看触发器7.删除触发器参考文献 1.简介 触发器(Trigger)是与表关联的命名数据库对象,当表发生特定事件时激活。 触发器的一些用途是对要插入表中的值执…

文章目录

  • 1.简介
  • 2.行级与语句级触发器
  • 3.触发时机
  • 4.触发器优缺点
  • 5.创建触发器
    • 语法
    • 示例
  • 6.查看触发器
  • 7.删除触发器
  • 参考文献

1.简介

触发器(Trigger)是与表关联的命名数据库对象,当表发生特定事件时激活。 触发器的一些用途是对要插入表中的值执行检查或对更新中涉及的值执行计算。

触发器也是一种存储程序,它和一个指定的表相关联,当该表中的数据发生变化(增加、更新、删除)时自动执行。 这些修改数据行的操作被称为触发器事件,例如 INSERT 或者 LOAD DATA 等插入数据的语句可以激活插入触发器。触发器可以设置为在触发事件之前或之后激活。 例如,您可以在插入表中的每行之前或更新每行之后激活触发器。

通过编写触发器,你可以实现数据的验证、记录变更、数据同步等操作。触发器是数据库中强大的功能之一,可以在保持数据完整性和一致性方面发挥重要作用。

2.行级与语句级触发器

按照 SQL 标准,触发器可以分为行级触发器(row-level trigger)和语句级触发器( statement-level trigger)。行级触发器对于修改的每一行数据都会激活一次,如果一个语句插入了 100 行数据,将会调用触发器 100 次;语句级触发器针对每个语句激活一次,一个插入 100 行数据的语句只会调用一次触发器。

MySQL 只支持行级触发器,不支持预语句级触发器。

3.触发时机

在 MySQL 中,只有执行增加、更新和删除操作时才能触发触发器的执行。

不同事件可以激活不同类型的触发器。

  • INSERT 事件触发器用于插入数据的操作,包括 INSERT、LOAD DATA、REPLACE 语句等。
  • UPDATE 事件触发器用于更新操作,例如 UPDATE 语句。
  • DELETE 事件触发器用于删除操作,例如 DELETE 和 REPLACE 语句等。

DROP TABLE 和 TRUNCATE TABLE 语句不会激活删除触发器。

另外,MySQL 触发器可以在触发事件之前或者之后执行,分别称为 BEFORE 触发器和 AFTER 触发器。这两种触发时机可以和不同的触发事件进行组合,例如 BEFORE INSERT 触发器或者 AFTER UPDATE 触发器。

4.触发器优缺点

MySQL 触发器的优点包括:

  • 记录并审核用户对表中数据的修改操作,实现审计功能。
  • 实现比检查约束更复杂的完整性约束,例如禁止非业务时间的数据操作。
  • 实现某种业务逻辑,例如增加或删除员工时自动更新部门中的人数。
  • 实时同步表中的数据。

虽然触发器功能强大,但是它也存在一些缺点:

  • 触发器会增加数据库结构的复杂度,而且触发器对应用程序不可见,难以调试。
  • 触发器需要占用更多的数据库服务器资源,尽量使用数据库提供的非空、唯一、检查约束等。
  • 触发器不能接收参数,只能基于当前的触发对象进行操作。

针对特殊场景使用触发器可以带来一定的便利性,但不要过渡依赖触发器,避免造成数据库的性能下降和维护困难。接下来我们介绍触发器的管理操作。

5.创建触发器

语法

MySQL 使用CREATE TRIGGRT语句创建触发器,基本语法如下:

CREATE[DEFINER = user]TRIGGER [IF NOT EXISTS] trigger_nametrigger_time trigger_eventON tbl_name FOR EACH ROW[trigger_order]trigger_bodytrigger_time: { BEFORE | AFTER }trigger_event: { INSERT | UPDATE | DELETE }trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

DEFINER 子句是可选的,用于指定触发器的创建者或所有者。它定义了谁有权利执行和管理这个触发器。具体来说,DEFINER 子句决定了触发器在哪个数据库用户的权限下运行。如果存在 DEFINER 子句,则用户值应为指定为 ‘user_name’@‘host_name’、CURRENT_USER 或 CURRENT_USER() 的 MySQL 帐户,允许的用户值取决于您拥有的权限。缺省为当前执行创建操作的用户。

trigger_name 是触发器的名称。

trigger_time 指定触发器的触发时机,在触发事件之前(BEFORE )还是之后(AFTER)执行。

trigger_event 用于定义触发事件的类型 INSERT、UPDATE 还是 DELETE。

table_name 是触发器关联的表名,不能是临时表或者视图。

FOR EACH ROW 表明这是一个行级触发器。

trigger_order 是可选的,用于指定与其他具有相同触发事件和动作时间的现有触发器的先后触发关系。如果没有指定任何选项,默认情况下按照触发器的创建顺序执行。

trigger_body 是触发器执行的具体语句。

在触发器主体中,您可以通过使用别名 OLD 和 NEW 来引用主题表(与触发器关联的表)中的列。OLD.col_name 引用更新或删除之前的现有行的列。NEW.col_name 是指要插入的新行或更新后的现有行的列。

示例

下面是一个简单的示例,它将触发器与表关联起来,以激活 INSERT 操作。 触发器充当累加器,对插入表的某一列中的值求和。

mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
Query OK, 0 rows affected (0.03 sec)mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON accountFOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.01 sec)

上面创建了一个名为 ins_sum 的触发器,该触发器与 ins_sum 表关联。 它还指定了触发器动作时间(BEFORE)、触发事件(INSERT)以及触发器激活时执行的操作的子句。

要使用触发器,请将累加器变量设置为零,执行 INSERT 语句,然后查看变量的值。

mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
mysql> SELECT @sum AS 'Total amount inserted';
+-----------------------+
| Total amount inserted |
+-----------------------+
|               1852.48 |
+-----------------------+

6.查看触发器

使用 SHOW TRIGGERS 语句可以查看数据库中的触发器列表。

SHOW TRIGGERS[{FROM | IN} db_name][LIKE 'pattern' | WHERE expr]

db_name 用于查看指定数据库中的触发器,默认为当前数据库。

LIKE 子句(如果存在)指示要匹配的表名称(不是触发器名称),显示这些表的触发器。

可以使用 WHERE 子句来使用更通用的条件筛选。

比如查看上面创建的触发器 ins_sum。

mysql> SHOW TRIGGERS LIKE 'acc%'\G
*************************** 1. row ***************************Trigger: ins_sumEvent: INSERTTable: accountStatement: SET @sum = @sum + NEW.amountTiming: BEFORECreated: 2023-08-24 10:10:12.61sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONDefiner: me@localhost
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ciDatabase Collation: utf8mb4_0900_ai_ci

另外,MySQL 系统表 INFORMATION_SCHEMA.TRIGGERS 中包含了更详细的触发器信息。

如果想要获取创建某个触发器的 DDL 语句,可以 SHOW CREATE TRIGGER 语句。

mysql> SHOW CREATE TRIGGER ins_sum\G
*************************** 1. row ***************************Trigger: ins_sumsql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
SQL Original Statement: CREATE DEFINER=`me`@`localhost` TRIGGER `ins_sum`BEFORE INSERT ON `account`FOR EACH ROW SET @sum = @sum + NEW.amountcharacter_set_client: utf8mb4collation_connection: utf8mb4_0900_ai_ciDatabase Collation: utf8mb4_0900_ai_ciCreated: 2023-08-24 10:10:12.61

7.删除触发器

MySQL 没有提供修改触发器的语句,只能通过 DROP TRIGGER 语句删除并再次创建触发器。

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

该语句会删除一个触发器。 模式(数据库)名称是可选的。 如果省略模式,则会在当前的数据库中查找并删除触发器。DROP TRIGGER 需要与触发器关联的表的 TRIGGER 权限。

IF EXISTS 可以避免触发器 tri_audit_salary 不存在时产生错误。

例如,以下语句可以用于删除触发器 ins_sum。

DROP TRIGGER IF EXISTS ins_sum;

参考文献

MySQL 8.0 Reference Manual :: 25 Stored Objects
MySQL 8.0 Reference Manual :: 25.3 Using Triggers
13.1.22 CREATE TRIGGER Statement
13.7.7.40 SHOW TRIGGERS Statement
13.7.7.11 SHOW CREATE TRIGGER Statement
13.1.34 DROP TRIGGER Statement
《MySQL 入门教程》第 33 篇 触发器

http://www.hkea.cn/news/201510/

相关文章:

  • 网站页脚有什么作用厦门seo哪家强
  • 东莞百度提升优化优化推广网站推荐
  • 查企业网站有哪些站长统计app软件
  • 做a高清视频在线观看网站济源新站seo关键词排名推广
  • 刚做的网站怎么搜索不出来百度seo收录软件
  • 视频拍摄app站长工具seo综合查询广告
  • 新闻单位建设网站的意义武汉seo推广优化
  • 低价网站公司软文怎么写
  • 东莞市建设公共交易中心网站百度官网首页
  • 如何建立的网站能争钱优化营商环境 助推高质量发展
  • 做百度网站营销型网站建设排名
  • 网站域名被黑国际新闻最新消息战争
  • 苏州网站开发公司济南兴田德润厉害吗网络自动推广软件
  • 广药网站建设试卷株洲最新今日头条
  • 网站建设管理考核办法微信推广平台怎么做
  • 网站新闻模块代码网络推广有哪些常见的推广方法
  • 合肥大型网站如何推广普通话
  • 高端网站制作软件怎么样推广自己的店铺和产品
  • 无障碍浏览网站怎么做关键词seo排名优化推荐
  • wordpress 247seo推广系统
  • 做深圳门户网站起什么名字好泰州seo外包公司
  • 网站视频上传怎么做百度站长平台论坛
  • wordpress农业模板下载小时seo
  • 做网站语言排名2018发帖推广哪个平台好
  • 销氪crmseo入门讲解
  • 蒙阴哪有做淘宝网站的钓鱼网站制作教程
  • 网站如何做导航条下拉菜单怎么做百度网页
  • 网站开发都做什么平台推广精准客源
  • 网站建设共享ip宁波seo搜索引擎优化
  • 学校网站建设必要性搜索引擎排名