【系统性学习】《Mysql基础》【Mysql触发器 新建触发器、修改触发器、删除触发器、举例】 编程入门 学习分享 【公开免费】

2023-11-09

原文:https://www.cnblogs.com/liuguiqing/p/17278532.html

-- =========第八章:触发器========================
触发器:触发执行特定事件。(关联表对象,当特定事件出现时,触发激活)
目的:保护表数据,(保证表数据完整性和一致性。)
1、新建触发器:
格式:create trigger 数据库名.触发器名称  触发时刻 insert  on 表名 for each row set 触发动作和条件;
(其中触发时刻为:before 或 after )
格式速记:
    create trigger 库.触
    时刻 insert on
    表 for each row set 条件;
 
举例:给表创建一个触发器,每次向表插入一行数据,插入时,把str设定为“one student ”
mysql> create trigger db_school.trName after insert on tb_student for each row set @str='one student';
Query OK, 0 rows affected (0.20 sec)
验证触发器:
先插入数据:
insert into tb_student(studentNo,studentName,sex,birthday,native,nation,classNo,studentID) values('201664','王梦天','女','1980-01-22','山西大同','汉','1班','1423372333344');
查询触发器:
mysql> select @str;
+-------------+
| @str        |
+-------------+
| one student |
+-------------+
1 row in set (0.00 sec)
 
2、删除触发器:
格式:drop trigger is exists 数据库名.触发器名;
 
举例:
mysql> drop trigger db_school.trName;
Query OK, 0 rows affected (0.00 sec)
 
3、更新触发器:
格式:create trigger 数据库名.触发器名称  before update  on 表名 for each row set 触发动作和条件;
(其中触发时刻只能是:before )
(触发动作中:new为可修改,old为只读)
    
格式速记:
    create trigger 库.触 
    before update on
    表 for each row set 条件; 
 
举例:在数据db_school创建一个触发器trUpdate,在每次更新学生表时将nation列值设定为native值:
mysql> create trigger db_school.trupdate before update on tb_student for each row set new.nation=old.native;
Query OK, 0 rows affected (0.16 sec)
触发器验证:
先更新数据:把王梦天同学名字改为张飞:
mysql> update tb_student set studentName='张飞' where studentName='王梦天';
Query OK, 1 row affected (0.08 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
查看表:
mysql> select * from tb_student where studentName='张飞';
+----+-----------+-------------+------+------------+----------+----------+---------+---------------+
| id | studentNo | studentName | sex  | birthday   | native   | nation   | classNo | studentID     |
+----+-----------+-------------+------+------------+----------+----------+---------+---------------+
| 24 | 201664    | 张飞        | 女   | 1980-01-22 | 山西大同 | 山西大同 | 1班     | 1423372333344 |
+----+-----------+-------------+------+------------+----------+----------+---------+---------------+
1 row in set (0.00 sec)
 
可以看到nation变成了native列的值,因此说触发器是被执行的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【系统性学习】《Mysql基础》【Mysql触发器 新建触发器、修改触发器、删除触发器、举例】 编程入门 学习分享 【公开免费】 的相关文章

  • mysql语句中的*星号是什么意思?

    Ex mysql query SELECT FROM members WHERE id id 这意味着选择表中的所有列
  • 无法使用 Django 应用程序从容器连接到 MySQL docker 容器

    当我尝试从运行 Django 应用程序的 docker 容器连接到运行 MySQL 的容器时 出现以下错误 django db utils OperationalError 2003 Can t connect to MySQL serve
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • MySQL 使用 ALTER IGNORE TABLE 出现重复错误

    我的 MySQL 中有一个有重复项的表 我尝试删除重复项并保留一项 我没有主键 我可以通过以下方式找到重复项 select user id server id count as NumDuplicates from user server
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤

随机推荐