MySQL触发器相关知识

1、什么是触发器

        触发器(trigger)是mysql的数据库对象之一,是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时(这些事件包括insert、update、delete三种),将调用该对象,即表的操作事件触发表上的触发器的执行。

2、触发器的作用

        触发器是由insert、update和delete等事件来触发某种特定操作。满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样做可以保证某些操作之间的一致性。

        例如,当学生表中增加了一个学生信息时,学生的总数就必须同时改变。可以在这里创建一个触发器,每次增加一个学生的记录,就执行一次计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数一致的。触发器触发的执行语句可能有一个,也可能有多个。

3、触发器的特性?

  • 什么时候触发?before/after, 在insert、update、delete 之前或者之后?
  • 什么条件触发?insert还是update还是delete
  • 触发频率:针对每一行执行  for each row
  • 触发器定义在哪个表上? on Tablename

4、创建触发器

(1)创建只有一个执行语句的触发器

-- 1、创建只有一个执行语句的触发器
create trigger 触发器名 before | after 触发事件 
on 表名 for each row 
执行语句
  • 触发器名称,指要创建的自定义触发器的名字,通常使用trigger_ 或 tg_为前缀。
  • before和after参数指定了触发器执行的时间,“before”指在触发事件之前执行触发语句,after表示在触发事件之后执行触发语句。
  • 触发事件:指触发的条件,其中包括insert、update和delete;
  • “表名”参数指触发事件操作的表的名称;
  • for each row表示任何一条记录上的操作满足触发事件都会触发该触发器;
  • “执行语句”参数指触发器被触发后执行的程序。

例:在account表上创建一个触发器:当account表执行insert操作之前(before),先向user_info 表中写一条user_id = 99, realname = 'niuhehe'的数据

-- 创建触发器语句
mysql> create trigger tg_insert_account before insert on account
    -> for each row 
    -> insert into user_info set user_id = 99, realname = 'niuhehe'
    -> ;
Query OK, 0 rows affected (0.01 sec)

-- account表执行 insert 动作
mysql> 
mysql> insert into account(`name`, `balance`) values('niuhehe', 125);
Query OK, 1 row affected (0.01 sec)

-- 则user_info表自动写入了一条我们设置好的数据
mysql> select * from user_info;
+----+---------+----------+------+-----------+-----------+-----------+
| id | user_id | realname | age  | sheng     | shi       | xian      |
+----+---------+----------+------+-----------+-----------+-----------+
|  1 |       1 | 张三     |   15 | 山东省    | 菏泽市    | 牡丹区    |
|  5 |      99 | niuhehe  | NULL | NULL      | NULL      | NULL      |
+----+---------+----------+------+-----------+-----------+-----------+
5 rows in set (0.00 sec)

(2)创建有多个执行语句的触发器

create trigger 触发器名 before | after 触发事件
on 表名 for each row
begin
	执行语句列表
end
  • begin与end之间的“执行语句列表”参数表示需要执行的多个执行语句的内容。不同的执行语句之间用英文分号隔开。
  • 一般情况下,MySQL默认是以“;” 作为结束执行语句。在创建触发器过程中需要用到“;”。为了解决这个问题,可以用delimiter语句指定结束符号。如“delimiter &&”,可以将结束符号由默认的分号变成“&&”。当触发器创建完成后,可以用命令“delimiter;”来将结束符号再变会系统默认的“;”。

例:在account表上创建一个触发器:当此表执行update操作时,执行以下动作:

向p_user表中写一条 name = 'liuhaha' 的数据

向p_user_info表中写一条 realname = 'liuhaha'的数据

mysql> delimiter &&  -- 指定结束符号 为 &&
mysql> create trigger tg_account_update before update
    -> on account for each row
    -> begin
    -> insert into p_user set `name` = 'liuhaha';
    -> insert into p_user_info set realname = 'liuhaha';
    -> end
    -> &&
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;    -- 触发器创建语句完成后再指定回来
mysql> 

5、查看触发器

(1)通过 show triggers 查看所有触发器

-- 列出所有触发器
show triggers;

 (2)通过系统triggers表查看触发器

在MySQL中,所有触发器的定义都存在information_schema数据库下的triggers表中。查询triggers表,可以查看到数据库中所有触发器的详细信息。查询的语句如下:

select * from information_schema.triggers;

此语法显示了所有数据库中的触发器,我们可以通过指定字段指定条件来筛选我们需要的数据。

6、删除触发器

-- 删除触发器
drop trigger 触发器名称;
智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值