mysql——trigger,包括的问题很多,帮忙看看!!! 比如有两个这样的表:书刊(书号,书名,书刊类型ID)书刊类型(ID,类型名称)如何通过trigger控制,使得当我插入一个书刊时,如果书刊类型存在就允许插入,否则不插入并返回错误提示???????主要不知道语法,它的官方手册里讲得太简单了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CREATE TABLE `studentlist` ( `Titleof` VARCHAR(100) DEFAULT NULL, `MgmtArea` VARCHAR(100) DEFAULT NULL, `Department` VARCHAR(100) DEFAULT NULL, `Anniversary` INT(2) DEFAULT '0', `Notes` TEXT, `Mobilephone` VARCHAR(100) DEFAULT NULL, `Eid` INT(11) NOT NULL AUTO_INCREMENT, `empjid` VARCHAR(20) DEFAULT NULL, PRIMARY KEY (`Eid`)) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8DELIMITER $$USE `etggg`$$DROP TRIGGER /*!50032 IF EXISTS */ `checkscode`$$CREATE /*!50017 DEFINER = 'root'@'localhost' */ TRIGGER `checkscode` BEFORE INSERT ON `studentlist` FOR EACH ROW BEGIN IF EXISTS(SELECT eid FROM studentlist WHERE MgmtArea=TRIM(new.MgmtArea)) THEN SET new.Notes=CONCAT(new.MgmtArea,'该编号已存在');#如果你要有提示,就在这里设一个主键冲突 END IF; END;$$DELIMITER ;INSERT INTO studentlist(Titleof,MgmtArea) VALUES('黎明','JLY001');mysql> select * from studentlist;+---------+----------+------------+-------------+--------------------+-------------+-----+--------+| Titleof | MgmtArea | Department | Anniversary | Notes | Mobilephone | Eid | empjid |+---------+----------+------------+-------------+--------------------+-------------+-----+--------+| 李宏峰 | JLY001 | | 0 | | | 1 | NULL || 连芳芳 | JLY002 | | 0 | | | 2 | NULL || 樊少维 | JLY003 | | 0 | | | 3 | NULL || 吴炼 | JLY004 | | 0 | | | 4 | NULL || 黎明 | JLY001 | NULL | 0 | JLY001该编号已存在 | NULL | 5 | NULL |+---------+----------+------------+-------------+--------------------+-------------+-----+--------+5 rows in set (0.00 sec) MYSQL没有触发器回滚,只有设置一个重复主键来提示出错,不插入数据 参考下贴http://blog.csdn.net/ACMAIN_CHM/archive/2009/07/25/4380183.aspxMySQL 中如何在触发器里中断记录的插入或更新? 其实还有一种简单的方法,就是直接用innodb存储引擎的外键约束 C++程序向mysql数据库中插入自己输入的数据 mySql 登陆出现问题 使用mysql administrator管理mysql不能添加用户 请教一个mysql查询语句,在线等,万分感谢! 帮我看看这个sql写 [==难题==]mysql时间段转成时间行 mysql存储过程 字符连接 如何更改字段属性啊? mysql存储过程中动态构造sql语句 如何查询库存,找牛人帮忙解答 "ACMAIN_CHM"给看看driver has not received any packets from the server 求mysql自增字段,主子表同时保存的解决方法
CREATE TABLE `studentlist` (
`Titleof` VARCHAR(100) DEFAULT NULL,
`MgmtArea` VARCHAR(100) DEFAULT NULL,
`Department` VARCHAR(100) DEFAULT NULL,
`Anniversary` INT(2) DEFAULT '0',
`Notes` TEXT,
`Mobilephone` VARCHAR(100) DEFAULT NULL,
`Eid` INT(11) NOT NULL AUTO_INCREMENT,
`empjid` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`Eid`)
) ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
DELIMITER $$USE `etggg`$$DROP TRIGGER /*!50032 IF EXISTS */ `checkscode`$$CREATE
/*!50017 DEFINER = 'root'@'localhost' */
TRIGGER `checkscode` BEFORE INSERT ON `studentlist`
FOR EACH ROW BEGIN
IF EXISTS(SELECT eid FROM studentlist WHERE MgmtArea=TRIM(new.MgmtArea)) THEN
SET new.Notes=CONCAT(new.MgmtArea,'该编号已存在');
#如果你要有提示,就在这里设一个主键冲突
END IF;
END;
$$DELIMITER ;
INSERT INTO studentlist(Titleof,MgmtArea) VALUES('黎明','JLY001');
mysql> select * from studentlist;
+---------+----------+------------+-------------+--------------------+----------
---+-----+--------+
| Titleof | MgmtArea | Department | Anniversary | Notes | Mobilepho
ne | Eid | empjid |
+---------+----------+------------+-------------+--------------------+----------
---+-----+--------+
| 李宏峰 | JLY001 | | 0 | |
| 1 | NULL |
| 连芳芳 | JLY002 | | 0 | |
| 2 | NULL |
| 樊少维 | JLY003 | | 0 | |
| 3 | NULL |
| 吴炼 | JLY004 | | 0 | |
| 4 | NULL |
| 黎明 | JLY001 | NULL | 0 | JLY001该编号已存在
| NULL | 5 | NULL |
+---------+----------+------------+-------------+--------------------+----------
---+-----+--------+
5 rows in set (0.00 sec)
http://blog.csdn.net/ACMAIN_CHM/archive/2009/07/25/4380183.aspx
MySQL 中如何在触发器里中断记录的插入或更新?