关于mysql触发器的问题:执行事件插入的字段是否一定要满足字段的所有约束条件?
首先是一个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触发器的问题:执行事件插入的字段是否一定要满足字段的所有约束条件?相关推荐
- mysql触发器 node_node.js中事件触发器events的使用
node.js是基于事件驱动的,通过events,我们可以方便的创建事件,并通过触发事件来调用我们自定义的监听函数. 所有能触发事件的对象都应该是 EventEmitter 类的实例,一般我们自定义一 ...
- mysql latid1_【转】mysql触发器的实战经验(触发器执行失败,sql会回滚吗) | 学步园...
1 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...
- [数据库] Navicat for MySQL触发器更新和插入操作
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...
- mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目
触发器(Trigger)的起源 MySQL是最受欢迎的开源RDBMS,被社区和企业广泛使用.触发器是MySQL在5.0.1(开天辟地一版本)中增加的三大新功能之一,另外两个师兄弟是视图(view)与存 ...
- MySQL触发器更新和插入操作
MySQL触发器更新和插入操作 一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执 ...
- Mysql创建触发器实现不同表的插入、更新、删除操作
说明:Mysql5.0以上的版本才支持下面的操作. Mysql 触发器的插入.更新.删除操作. 在这里建了两个表:其中这两个表的结构不一样,这里给表admin建立触发器 在对表admin操作的同时,触 ...
- mysql 触发器采坑记录(mysql 触发器采坑记录 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行。 当创建触发器(视图、存储过程、函数)时,如果没有)
mysql 触发器采坑记录(语序有点凌乱,回头再整理) 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行. 当创建触发器(视图.存储过程.函数)时,如果没有指定创建 ...
- mysql触发器执行失败_mysql-Mysql数据库触发器执行不成功
Mysql数据库中有order.orderitem和goods三张表,其中order与orderitem通过order的ID字段与orderitem的orderid字段关联:其中goods与order ...
- mysql 触发器执行失败_mysql-Mysql数据库触发器执行不成功
Mysql数据库中有order.orderitem和goods三张表,其中order与orderitem通过order的ID字段与orderitem的orderid字段关联:其中goods与order ...
最新文章
- 利用闭包实现多次ajax请求只执行最后一次
- c语言课程设计贴吧,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
- php html标签闭合,php截取字符串,完美html自动闭合
- Ubuntu 16.04服务器安装及软件配置
- 微信公共平台接口开发--Java实现
- 在栈中压入一个字符串c语言,面试题 31:栈的压入、弹出序列
- 牛客网 【每日一题】5月9日 过河
- 让IE6-IE8 支持HTML5
- 大疆aeb连拍_大疆 AIR2 玩机(一)包围曝光及后期处理
- sqoop增量导入hive_Sqoop 增量导MySQL数据 至Hive
- Layui图片上传限制一张的问题
- 备战数学建模41-蒙特卡罗模拟(攻坚战5)
- MyQQ project
- 论文参考文献格式与设置
- 拉绳位移传感器的原理
- POI 处理word 文档中 文本框模板
- aecmap快捷键_ArcGIS编辑操作的常用快捷键
- IE和谷歌浏览器区分
- 信息安全文章搜索引擎技术原理
- 江苏大学计算机学院复试题,本部基础A定稿-含答案(江苏大学计算机).doc
热门文章
- CONTEST199 [有奖]洛谷8月月赛题解
- QQ vs 360的战争之我见
- why xml sucks
- I've got so many hongbaos(should it be translated as red bags?)
- SpringBoot三种获取Request和Response的方法
- [Python学习] 专题六.局部变量、全局变量global、导入模块变量
- 【数据结构与算法】之深入解析“有效的括号”的求解思路与算法示例
- 中国大学MOOC 计算机组成原理第5章 测试(上)
- 【Tools】GitBook入门教程
- 【OpenSSL】OpenSSL之MD5