MySQL触发器的题_mysql触发器问题
图书类别表如下:
+------+
| bkn |
+------+
| 健康 |
| 军事 |
| 医药 |
| 哲学 |
| 小说 |
| 政治 |
| 教育 |
| 散文 |
| 科幻 |
| 童话 |
| 经济 |
| 美食 |
+------+
图书表里面有很多这些类别的书,图书表中图书类别的外键是图书类别表的图书类别。
我想做一个触发器,在我更改图书类别前,(因为外键约束,改哪个表的类别都是不行的),能够自动向图书类别表增加要改成的那个新类别,改完之后,再把旧类别从图书类别表中删去。
就这么点问题,却遇到了莫名其妙的错误。
DELIMITER $
CREATE TRIGGER change_bk
BEFORE UPDATE
ON b FOR EACH ROW
BEGIN
insert into bkind values(new.bk);
END$
mysql> update b set bk = '医学' where bk = '医药'$
ERROR 1062 (23000): Duplicate entry '医学' for key 'PRIMARY'
我好像明白了,b表里有不止一条要改的记录,他每次都要执行一遍插入操作,所以。。。
做了个测试,真的是这样。
mysql> insert into bkind values('lala');
-> $
Query OK, 1 row affected (0.03 sec)
mysql> insert into b values('1', '1', 'lala', '1', 1, 1, '1', '1', '1');
-> $
Query OK, 1 row affected (0.03 sec)
mysql> update b set bk = 'la' where bk = 'lala'$
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from bkind;
-> $
+------+
| bkn |
+------+
| la |
| lala |
插进来了!!!
哇哇哇!!!就在几秒前,我终于把标题最前面的待解决三个字去掉了!!!
血汗泪啊!!!
DELIMITER $
CREATE TRIGGER change_bk
BEFORE UPDATE
ON b FOR EACH ROW
BEGINif(new.bk not in (selectbknfrombkind))
then
insert into bkind values(new.bk);
endif;
END$
mysql> update b set bk = 'hj' where bk = '医药'$
Query OK, 2 rows affected (0.04 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from b where bk = 'hj';
-> $
+---------------+----------------------+------+-------+----------+------+--------+-----------------------+-------------+
| isbn | bn | bk | bs | maxstore | rest | author | publisher | publishdate |
+---------------+----------------------+------+-------+----------+------+--------+-----------------------+-------------+
| 9787502581091 | 医药学基础 | hj | 正常 | 3 | 2 | 戴敏 | 化学工业出版社发行部 | 2006-3 |
| 9787806621950 | 中国苗族药物彩色图集 | hj | 报废 | 3 | 3 | 汪毅 | 贵州科技出版社 | 2002-1 |
+---------------+----------------------+------+-------+----------+------
————————————感谢坚持解决问题的自己——————————————————————————————
整理:
mysql> update b set bk = '医学' where bk = '医药'$
Query OK, 2 rows affected (0.04 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from b where bk = '医学'$
+---------------+----------------------+------+-------+----------+------+--------+-----------------------+-------------+
| isbn | bn | bk | bs | maxstore | rest | author | publisher | publishdate |
+---------------+----------------------+------+-------+----------+------+--------+-----------------------+-------------+
| 9787502581091 | 医药学基础 | 医学 | 正常 | 3 | 2 | 戴敏 | 化学工业出版社发行部 | 2006-3 |
| 9787806621950 | 中国苗族药物彩色图集 | 医学 | 报废 | 3 | 3 | 汪毅 | 贵州科技出版社 | 2002-1 |
+---------------+----------------------+------+-------+----------+------+--------+-----------------------+-------------+
2 rows in set (0.00 sec)
mysql> select * from bkind;
-> $
+------+
| bkn |
+------+
| la |
| lala |
| 健康 |
| 军事 |
| 医学 |
| 哲学 |
| 小说 |
| 政治 |
| 教育 |
| 散文 |
| 科幻 |
| 童话 |
| 经济 |
| 美食 |
+------+
14 rows in set (0.00 sec)
完整代码:
DELIMITER $
CREATE TRIGGER change_bk
BEFORE UPDATE
ON b FOR EACH ROW
BEGINif(new.bk not in (selectbknfrombkind))
then
insert into bkind values(new.bk);
endif;
END$
DELIMITER $
CREATE TRIGGER change_bk1
AFTER UPDATE
ON b FOR EACH ROW
BEGINif(old.bk not in (selectbkfromb))
then
deletefrom bkind where bkn =old.bk;
endif;
END$
总结:问题是不难,找对路是关键。
MySQL触发器的题_mysql触发器问题相关推荐
- mysql创建删除触发器的时候_mysql触发器简介及如何创建和删除触发器
什么是mysql触发器 需要MySQL 5 对触发器的支持是在MySQL 5中增加的.因此,本章内容适用于MySQL 5或之后的版本. MySQL语句在需要时被执行,存储过程也是如此.但是,如果你想要 ...
- mysql库表的触发器表名_MySQL 触发器,实现不同数据库,不同表名,表结构不同,数据实时同步...
创建触发器: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt ...
- mysql触发器应用场景_MySQL触发器的使用场景及方法实例
触发器: 触发器的使用场景以及相应版本: 触发器可以使用的MySQL版本: 版本:MySQL5以上 使用场景例子: 每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写 ...
- mysql触发器访问网站_MySQL触发器使用-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....
触发器:触发器的使用场景以及相应版本:触发器可以使用的MySQL版本:- 版本:MySQL5以上### 使用场景例子:1. 每当增加一个顾客到某个数据库表时,都检查其每当增加一个顾客到某个数据库表时, ...
- mysql触发器实验小结_mysql 触发器小结
触发器可以监视某种数据操作(insert/update/delete) 并触发(insert/update/delete)( 创建触发器4要素 监视地点 -----监视事件----触发时间----触发 ...
- mysql触发器如果提示_mysql 触发器
1 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...
- mysql触发器错误信息_MySQL 触发器错误_MySQL
bitsCN.com 使用Spring jdbctemplate时出错: view sourceprint?01 org.springframework.jdbc.UncategorizedSQLEx ...
- mysql触发器 while循环_mysql触发器跳出当前循环方法
mysql触发器跳出当前循环方法 set @num=@UnitLength/3; label: while i set @length=(select SUBSTRING(@unit_sid_fk,1 ...
- mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项
在MySQL中,触发器可以在你执行INSERT.UPDATE或DELETE的时候,执行一些特定的操作.在创建触发器时,可以指定是在执行SQL语句之前或是之后执行这些操作.通过触发器,你可以实现一些业务 ...
最新文章
- 讲解JS的promise,这篇是专业认真的!
- 扩增子图表解读5火山图:差异OTU数量及变化规律
- raster java_Raster
- CentOS-7-64bit 配置Apache + MySQL + PHP
- 2021全州高中高考成绩查询,最新!最全!桂林各中学高考成绩汇总!为桂林考生骄傲!...
- 硬RAID可以为NVMe SSD数据可靠性保驾护航吗?
- IOS第七天(2:UiTableView 加上数据分离)
- PAT乙类1005之继续(3n+1)猜想 (25 分)
- antd form rules字数限制_Package - antd-form-rules
- java jexl_一种表达式语言的解析引擎JEXL简单使用
- python批量复制文件夹下所有文件_python定时复制远程文件夹中所有文件
- 工具 | 2的次方对照表
- NOIP模拟 位运算(trie树+按位贪心)
- 基于51单片机MAX31865的PT100铂电阻测温设计
- 无线承载根据承载的内容不同分为SRB和DRB EPS承载根据用户业务需求和Qos的不同可以分为GBR/ Non-GBR 承载...
- Linux内核设计与实现 第17章 设备与模块
- WPF界面工具Telerik UI for WPF入门级教程 - 设置一个主题(二)
- Qt 免注册版本下载
- 阿拉伯数字和汉字对照表
- 使用python有趣地解决一道动态币值规划方案
热门文章
- 进化材料基因:机器学习如何推动下一代新材料的发现
- word2019插入MathType公式行距变大解决
- Python爬虫入门基础
- dlna移植android系统,基于Android的DLNA互动视频系统的设计与实现
- 三星i9308刷机笔记
- [附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统
- ArcGIS给栅格数据建立属性表
- Archicad二次开发——创建墙、梁、柱等元素
- [附源码]JAVA+ssm基于JAVA的校园电车租赁系统(程序+Lw)
- Azure Database for Mysql 还原操作,还原表,还原库,还原一切