首先是一个product表,如下:

mysql> show create table product\G
*************************** 1. row ***************************Table: product
Create Table: CREATE TABLE `product` (`id` int NOT NULL,`name` varchar(20) NOT NULL,`functionn` varchar(50) NOT NULL,`address` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

再就是建立一个operate表

mysql> show create table operate\G
*************************** 1. row ***************************Table: operate
Create Table: CREATE TABLE `operate` (`op_id` int NOT NULL AUTO_INCREMENT,`op_type` varchar(20) NOT NULL,`op_time` time NOT NULL,PRIMARY KEY (`op_id`),UNIQUE KEY `op_id` (`op_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

下面建立一个触发器,注意operate表的第一个字段op_id是not null的,但是建立trigger的时候,却给operate首个字段赋值

null,如下:

mysql> show triggers\G
*************************** 1. row ***************************Trigger: product_bf_insertEvent: INSERTTable: productStatement: insert into operate values(null,'insert product',current_time)Timing: BEFORECreated: 2020-07-23 22:25:41.89sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONDefiner: skip-grants user@skip-grants host
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ciDatabase Collation: utf8mb4_0900_ai_ci
*************************** 2. row ***************************

执行前,先查看operate表和product表的内容:

mysql> select * from operate;
+-------+----------------+----------+
| op_id | op_type        | op_time  |
+-------+----------------+----------+
|     1 | insert product | 22:45:10 |
|     3 | insert product | 22:53:18 |
|     5 | insert product | 22:54:54 |
|     6 | insert product | 09:32:45 |
+-------+----------------+----------+
4 rows in set (0.00 sec)
mysql> select * from product;
+----+-------+-----------+---------+
| id | name  | functionn | address |
+----+-------+-----------+---------+
|  1 | name1 | function1 | address |
|  2 | name1 | function1 | address |
|  3 | name1 | function1 | address |
|  4 | name1 | fucntion1 | address |
+----+-------+-----------+---------+
4 rows in set (0.00 sec)

下面开始执行触发器触发事件(向product表中插入字段),如下:

mysql> insert into product values(5,'name2','function2','address1');
Query OK, 1 row affected (0.01 sec)

查看 执行语句是否执行,查看operate表:

mysql> select * from operate;
+-------+----------------+----------+
| op_id | op_type        | op_time  |
+-------+----------------+----------+
|     1 | insert product | 22:45:10 |
|     3 | insert product | 22:53:18 |
|     5 | insert product | 22:54:54 |
|     6 | insert product | 09:32:45 |
|     7 | insert product | 09:42:53 |
+-------+----------------+----------+
5 rows in set (0.00 sec)

结论:执行事件中遇到not null字段(本文是primary key的not null字段),那么可以插入null?

也就是执行事件可以不满足原来表的定义吗?

再来一个定义:

可以看出table_test表中第一个字段id是not null的

mysql> show create table table_test;
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table      | Create Table                                                                                                                                          |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
| table_test | CREATE TABLE `table_test` (`id` int NOT NULL,`name` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+

建立表t1

mysql> show create table t1;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                  |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (`id` int NOT NULL,`time_of_now` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

建立触发器,

mysql> create trigger trigger_2-> after insert-> on t1-> for each row-> insert into table_test values(null,'name');
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values(1,now());
ERROR 1048 (23000): Column 'id' cannot be null

这里怎么又不行了呢?

把table_test 的id字段增加一个约束auto_increment,就可以插入null了,此时即使有not null也可以插入null

之后便可以插入null了。原来是有auto_increment就可以这么无视not null.

结论:auto_increment字段不论是不是not null,插入null后都是合法的。

关于mysql触发器的问题:执行事件插入的字段是否一定要满足字段的所有约束条件?相关推荐

  1. mysql触发器 node_node.js中事件触发器events的使用

    node.js是基于事件驱动的,通过events,我们可以方便的创建事件,并通过触发事件来调用我们自定义的监听函数. 所有能触发事件的对象都应该是 EventEmitter 类的实例,一般我们自定义一 ...

  2. mysql latid1_【转】mysql触发器的实战经验(触发器执行失败,sql会回滚吗) | 学步园...

    1   引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...

  3. [数据库] Navicat for MySQL触发器更新和插入操作

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...

  4. mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目

    触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...

  5. MySQL触发器更新和插入操作

    MySQL触发器更新和插入操作 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执 ...

  6. Mysql创建触发器实现不同表的插入、更新、删除操作

    说明:Mysql5.0以上的版本才支持下面的操作. Mysql 触发器的插入.更新.删除操作. 在这里建了两个表:其中这两个表的结构不一样,这里给表admin建立触发器 在对表admin操作的同时,触 ...

  7. mysql 触发器采坑记录(mysql 触发器采坑记录 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行。 当创建触发器(视图、存储过程、函数)时,如果没有)

    mysql 触发器采坑记录(语序有点凌乱,回头再整理) 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行. 当创建触发器(视图.存储过程.函数)时,如果没有指定创建 ...

  8. mysql触发器执行失败_mysql-Mysql数据库触发器执行不成功

    Mysql数据库中有order.orderitem和goods三张表,其中order与orderitem通过order的ID字段与orderitem的orderid字段关联:其中goods与order ...

  9. mysql 触发器执行失败_mysql-Mysql数据库触发器执行不成功

    Mysql数据库中有order.orderitem和goods三张表,其中order与orderitem通过order的ID字段与orderitem的orderid字段关联:其中goods与order ...

最新文章

  1. 利用闭包实现多次ajax请求只执行最后一次
  2. c语言课程设计贴吧,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  3. php html标签闭合,php截取字符串,完美html自动闭合
  4. Ubuntu 16.04服务器安装及软件配置
  5. 微信公共平台接口开发--Java实现
  6. 在栈中压入一个字符串c语言,面试题 31:栈的压入、弹出序列
  7. 牛客网 【每日一题】5月9日 过河
  8. 让IE6-IE8 支持HTML5
  9. 大疆aeb连拍_大疆 AIR2 玩机(一)包围曝光及后期处理
  10. sqoop增量导入hive_Sqoop 增量导MySQL数据 至Hive
  11. Layui图片上传限制一张的问题
  12. 备战数学建模41-蒙特卡罗模拟(攻坚战5)
  13. MyQQ project
  14. 论文参考文献格式与设置
  15. 拉绳位移传感器的原理
  16. POI 处理word 文档中 文本框模板
  17. aecmap快捷键_ArcGIS编辑操作的常用快捷键
  18. IE和谷歌浏览器区分
  19. 信息安全文章搜索引擎技术原理
  20. 江苏大学计算机学院复试题,本部基础A定稿-含答案(江苏大学计算机).doc

热门文章

  1. CONTEST199 [有奖]洛谷8月月赛题解
  2. QQ vs 360的战争之我见
  3. why xml sucks
  4. I've got so many hongbaos(should it be translated as red bags?)
  5. SpringBoot三种获取Request和Response的方法
  6. [Python学习] 专题六.局部变量、全局变量global、导入模块变量
  7. 【数据结构与算法】之深入解析“有效的括号”的求解思路与算法示例
  8. 中国大学MOOC 计算机组成原理第5章 测试(上)
  9. 【Tools】GitBook入门教程
  10. 【OpenSSL】OpenSSL之MD5