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

网站域名如何更换万网官网登录

网站域名如何更换,万网官网登录,交互设计案例100例,营销型网站大全前言: 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇,涵盖入门、进阶、高级(一些原理分析);​👨‍🏫​ 内容: 这一篇讲解触发器的使用。虽然…

在这里插入图片描述
前言

  • 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇+,涵盖入门、进阶、高级(一些原理分析);
  • ​👨‍🏫​ 内容: 这一篇讲解触发器的使用。
  • 虽然MYSQL命令很多,但是自己去多敲一点,到后面忘记了,查一下就可以回忆起来使用了;
  • 这一系列也是本人学习MYSQL做的笔记,也是为了方便后面忘记查询;
  • 参考资料:黑马、csdn和知乎博客;
  • 欢迎收藏 + 关注,本人将会持续更新后端和AI算法的学习笔记

    文章目录

    • 触发器
      • 1.触发器概述
      • 2. 触发器的创建
        • 2.1 创建触发器语法
        • 2.2 OLD 和 NEW
      • 3. 查看、删除触发器
        • 3.1 查看触发器
        • 3.2 删除触发器
      • 4. 触发器的优缺点
        • 4.1 优点
          • 1、触发器可以确保数据的完整性。
          • 2、触发器还可以用在操作数据前,对数据进行合法性检查
        • 4.2 缺点
          • 1、触发器最大的一个问题就是可读性差
          • 2、相关数据的变更,可能会导致触发器出错。
        • 4.3 注意点

触发器

🌃背景提出:

如商品信息和库存信息分别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时在库存表中添加一条库存记录。这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用事务包裹起来,确保这两个操作成为一个原子操作 ,要么全部执行,要么全部不执行。但是如果容易忘记其中的一步 ,导致数据缺失。

这个时候**可以创建一个触发器,让商品信息数据的插入操作自动触发库存数据的插入操作。**就不用担心因为忘记添加库存数据而导致的数据缺失了。

1.触发器概述

MySQL从 5.0.2 版本开始支持触发器。MySQL的触发器和存储过程一样,都是嵌入到MySQL服务器的一段程序。(注意:不是在应用层的)

触发器是由事件来触发某个操作(本人感觉可以相当于一个时间处理程序),这些事件包括INSERT、UPDATE、DELETE 事件,如果定义了触发程序,当数据库执行这些语句时候,就会自动激发触发器执行相应的操作

2. 触发器的创建

2.1 创建触发器语法

创建触发器的语法结构是:

CREATE TRIGGER 触发器名称
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
FOR EACH ROW
触发器执行的语句块;

说明:

  • 表名 :表示触发器监控的对象。
  • BEFORE|AFTER:表示触发的时间。BEFORE 表示在事件之前触发;AFTER 表示在事件之后触发。
  • INSERT|UPDATE|DELETE :表示触发的事件。
    • INSERT 表示插入记录时触发;
    • UPDATE 表示更新记录时触发;
    • DELETE 表示删除记录时触发。
  • 触发器执行的语句块 :可以是单条SQL语句,也可以是由BEGIN…END结构组成的复合语句块。

范例1:

1、创建数据表

CREATE TABLE users(number INT, money DECIMAL(10,2));

2、创建触发器

CREATE TRIGGER t_insert BEFORE INSERT ON users
FOR EACH ROW SET @sum = @sum+1;

3、使用触发器

在使用触发器之前,先将累加器变量设置为零,执行一条INSERT语句,然后查看该变量的值。

SET @sum = 0;
INSERT INTO users VALUES(1,35000);
SELECT @sum;

2.2 OLD 和 NEW

在触发器正文中,OLD 和 NEW 关键字能够访问受触发器影响的行中的列

🐯 注意

  • 在 INSERT 触发器中,只能使用 NEW.col_name;没有旧行。NEW值是插入的新值

  • 在 DELETE 触发器中,只能使用 OLD.col_name;没有新行。

  • 在 UPDATE 触发器中,可以使用 OLD.col_name 来引用行更新之前的列,使用 NEW.col_name 来引用行更新后的列。

  • 在 BEFORE 触发器中,AUTO_INCREMENT 列的 NEW 值为 0,而不是实际插入新行时自动生成的序列号。

1️⃣ 范例1:

1、插入触发器

-- 插入只有NEW,没有OLD
CREATE TRIGGER t_insert_val BEFORE INSERT ON users
FOR EACH ROW 
BEGIN#在插入之前可以通过new访问字段,并修改值(在ALTER触发器中无效)SET NEW.money = NEW.money - 1000;
END; INSERT INTO users VALUES(1,2000)

2、删除触发器

-- 创建一个保存已经删除的数据的表
CREATE TABLE users_del(number INT, money DECIMAL(10,2));-- 删除只有OLD,没有NEW
CREATE TRIGGER t_delete_val BEFORE DELETE ON users
FOR EACH ROW
BEGIN#把删除的记录插入到users_del表INSERT INTO users_del(number,money) VALUES(OLD.number,OLD.money) ;
END;DELETE FROM users WHERE number = 5;SELECT * FROM users;
SELECT * FROM users_del;DELETE FROM users;
DELETE FROM users_del;

3、更新触发器

-- 更新有OLD,也有NEW(更新之前)
CREATE TRIGGER t_update_val BEFORE UPDATE ON users
FOR EACH ROW
BEGIN#把旧数据和新数据都插入users_del表INSERT INTO users_del(number,money) VALUES(OLD.number,OLD.money);  #更新前的列INSERT INTO users_del(number,money) VALUES(NEW.number,NEW.money);  #跟新后的页
END;UPDATE users SET money = 100 WHERE number = 6;

2️⃣ 举例2

定义触发器“t_sal_check”,基于员工表“emps”的INSERT事件,在INSERT之前检查 将要添加的新员工薪资是否大于他领导的薪资,如果大于领导薪资,则报sqlstate_value为’HY000’的错误,从而使得添加失败。

CREATE TRIGGER t_sal_check BEFORE INSERT ON emps
FOR EACH ROW
BEGINDECLARE mgr_sal INT;#获取插入员工的领导的薪资SELECT sal INTO mgr_sal FROM emps WHERE empno = NEW.mgr;IF NEW.sal > mgr_sal THENSIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪资高于领导薪资-禁止插入';  # 报错END IF;END;INSERT INTO emps(empno,job,mgr,sal) VALUES(1,'打工人',7566,3400);
INSERT INTO emps(empno,job,mgr,sal) VALUES(2,'捡垃圾',7566,3300);

3. 查看、删除触发器

3.1 查看触发器

查看触发器是查看数据库中已经存在的触发器的定义、状态和语法信息等。

方式1:查看当前数据库的所有触发器的定义

SHOW TRIGGERS;

方式2:查看当前数据库中某个触发器的定义

SHOW CREATE TRIGGER 触发器名

方式3:从系统库information_schema的TRIGGERS表中查询指定数据库的触发器的信息。

SELECT * FROM information_schema.TRIGGERS WHERE trigger_schema='db_14';

3.2 删除触发器

DROP TRIGGER IF EXISTS 触发器名称;

4. 触发器的优缺点

4.1 优点

1、触发器可以确保数据的完整性。

假设我们用 进货单头表 (demo.importhead)来保存进货单的总体信息,包括进货单编号、供货商编号、仓库编号、总计进货数量、总计进货金额和验收日期。用 进货单明细表 (demo.importdetails)来保存进货商品的明细,包括进货单编号、商品编号、进货数量、进货价格和进货金额。

每当我们录入、删除和修改一条进货单明细数据的时候,进货单明细表里的数据就会发生变动。这个时候,可以使用触发器保证总计数量和总计金额数据的更新

2、触发器还可以用在操作数据前,对数据进行合法性检查

4.2 缺点

1、触发器最大的一个问题就是可读性差

因为触发器存储在数据库中,并且由事件驱动,这就意味着触发器有可能 不受应用层的控制 。这对系统维护是非常有挑战的。

如:

mysql> update demo.membermaster set memberdeposit=20 where memberid = 2;
ERROR 1054 (42S22): Unknown column 'aa' in 'field list'

🚨 错误:这是因为,触发器中的数据插入操作多了一个字段,系统提示错误。

2、相关数据的变更,可能会导致触发器出错。

特别是数据表结构的变更,都可能会导致触发器出错,进而影响数据操作的正常运行。这些都会由于触 发器本身的隐蔽性,影响到应用中错误原因排查的效率。

4.3 注意点

🚨 注意,如果在子表中定义了外键约束,并且外键指定了ON UPDATE/DELETE CASCADE/SET NULL子句,此时修改父表被引用的键值或删除父表被引用的记录行时,也会引起子表的修改和删除操作。

http://www.dtcms.com/wzjs/112778.html

相关文章:

  • 厦门 公司网站建设房地产估价师考试
  • 山东网站设计公司免费大数据平台
  • 上海高端做网站专门发广告的app
  • 自定义wordpress的字体seo标题优化的方法
  • 简单的购物网站怎么做系统优化app
  • 论坛做网站好吗怎么制作自己的网站
  • 小程序后台管理系统专业seo整站优化
  • 2015年做那个网站致富在哪里可以免费自学seo课程
  • 肃宁县做网站价格win10优化大师好用吗
  • 云企网站建设开发seo外链论坛
  • 凡科免费个人做网站有弊吗舆情监测系统排名
  • 上海申远建筑设计有限公司seo搜索引擎优化软件
  • 河北建设厅网站初始密码深圳优化公司排名
  • excel做网站页面布局上海网站seo外包
  • 湖北营销网站建设联系方式如何提高百度搜索排名
  • 网站建设服务费属于哪个大类成都推广团队
  • 找人做网站协议全球疫情最新消息
  • 信誉好的东莞网站推广微商营销技巧
  • 上海网站建设公司网今天热搜榜前十名
  • 做太空泥的几分钟网站网页设计基础
  • 德国和俄罗斯和做视频网站电商培训心得体会
  • pexels免费素材网站手机自动排名次的软件
  • 做弹幕视频效果的网站百度竞价代理商
  • 有哪些网站做外贸的免费收录链接网
  • 国内主流的电商平台有哪些安卓优化大师2023
  • 专业做生鲜的网站好自助建站系统个人网站
  • 智慧团建 网上共青团官网资深seo顾问
  • 母婴网站建设方案色盲测试
  • 小程序注册哪类商标哪家公司做推广优化好
  • 网站制作广外汇交易平台