比如有两个这样的表:
书刊(书号,书名,书刊类型ID)
书刊类型(ID,类型名称)如何通过trigger控制,使得当我插入一个书刊时,如果书刊类型存在就允许插入,否则不插入并返回错误提示???????
主要不知道语法,它的官方手册里讲得太简单了。

解决方案 »

  1.   


    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)
      

  2.   

    MYSQL没有触发器回滚,只有设置一个重复主键来提示出错,不插入数据
      

  3.   

    参考下贴
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/07/25/4380183.aspx
    MySQL 中如何在触发器里中断记录的插入或更新? 
      

  4.   

    其实还有一种简单的方法,就是直接用innodb存储引擎的外键约束