MySQL后插入触发器不工作

MySQL后插入触发器不工作,mysql,triggers,insert,phpmyadmin,Mysql,Triggers,Insert,Phpmyadmin,我有以下两个表和一个触发器,当在StudentID中使用非null值将记录插入用户表时,该触发器应该将记录插入Student表。MySQL不会报告触发器上的语法错误,并且用户表的insert按预期工作,但不会触发学生表的insert。 我试过在插入之前和之后使用,但没有效果。我使用的是phpMyAdmin版本3.5.2.2。任何帮助都将不胜感激 DROP TABLE IF EXISTS `User` ; CREATE TABLE IF NOT EXISTS `User` ( `UserI

我有以下两个表和一个触发器,当在StudentID中使用非null值将记录插入用户表时,该触发器应该将记录插入Student表。MySQL不会报告触发器上的语法错误,并且用户表的insert按预期工作,但不会触发学生表的insert。
我试过在插入之前和之后使用,但没有效果。我使用的是phpMyAdmin版本3.5.2.2。任何帮助都将不胜感激

DROP TABLE IF EXISTS `User` ;

CREATE  TABLE IF NOT EXISTS `User` (
  `UserID` INT NOT NULL AUTO_INCREMENT ,
  `FirstName` VARCHAR(45) NOT NULL ,
  `LastName` VARCHAR(45) NOT NULL ,
  `eMail` VARCHAR(60) NOT NULL ,
  `StudentID` INT NULL ,
  KEY ix_User_StudentID (StudentID),
  PRIMARY KEY (`UserID`)
)
ENGINE = InnoDB;  

DROP TABLE IF EXISTS `Student` ;

CREATE  TABLE IF NOT EXISTS `Student` (
  `StudentID` INT NOT NULL ,
  `UserID` INT NOT NULL ,
  PRIMARY KEY (`StudentID`) ,
  CONSTRAINT `fk_Student_User1`
    FOREIGN KEY (`StudentID` )
    REFERENCES `User` (`StudentID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE, 
  CONSTRAINT `fk_Student_User2`
    FOREIGN KEY (`UserID`)
    REFERENCES `User` (`UserID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
ENGINE = InnoDB;

DROP TRIGGER IF EXISTS after_insert_user;

DELIMITER //
CREATE TRIGGER after_insert_user 
AFTER INSERT ON `User`
FOR EACH ROW BEGIN
    IF (NEW.StudentID <> NULL) THEN
        INSERT INTO Student VALUES (NEW.StudentID, NEW.UserID); 
    END IF;
END;
//

DELIMITER ;
删除表(如果存在)`User`;
如果“用户”不存在,则创建表(
`UserID`INT非空自动增量,
`FirstName`VARCHAR(45)不为空,
`LastName`VARCHAR(45)不为空,
`电子邮件'VARCHAR(60)不为空,
`StudentID`INT NULL,
密钥ix_用户_学生ID(学生ID),
主键(`UserID`)
)
引擎=InnoDB;
如果存在“学生”,则删除表;
如果不存在“学生”,则创建表(
`StudentID`INT不为空,
`UserID`INT不为空,
主键(`StudentID`),
约束“fk_学生_用户1”`
外键(`StudentID`)
引用`User`(`StudentID`)
关于删除级联
在更新级联上,
约束“fk_学生_用户2”`
外键(`UserID`)
引用`User`(`UserID`)
关于删除级联
关于更新级联
)
引擎=InnoDB;
插入用户后,如果存在触发器,则丢弃触发器;
分隔符//
在插入用户后创建触发器
在`用户'上插入后`
每行开始
如果为(NEW.StudentID NULL),则
插入学生值(NEW.StudentID、NEW.UserID);
如果结束;
结束;
//
定界符;
它确实需要是后触发器,但是

IF (NEW.StudentID <> NULL) THEN
或者更神秘的是:

IF (NOT IFNULL(NEW.StudentID)) THEN
或者更深奥的:

IF (NOT NEW.StudentID <=> NULL) THEN
如果(不是NEW.StudentID NULL),则
以下是实际行动:

ross@pv1:~$ mysql -vvv < 15034839.sql 
--------------
DROP TABLE IF EXISTS `Student`
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
DROP TABLE IF EXISTS `User`
--------------

Query OK, 0 rows affected (0.01 sec)

--------------
CREATE  TABLE IF NOT EXISTS `User` (
  `UserID` INT NOT NULL AUTO_INCREMENT ,
  `FirstName` VARCHAR(45) NOT NULL ,
  `LastName` VARCHAR(45) NOT NULL ,
  `eMail` VARCHAR(60) NOT NULL ,
  `StudentID` INT NULL ,
  KEY ix_User_StudentID (StudentID),
  PRIMARY KEY (`UserID`)
)
ENGINE = InnoDB
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
CREATE  TABLE IF NOT EXISTS `Student` (
  `StudentID` INT NOT NULL ,
  `UserID` INT NOT NULL ,
  PRIMARY KEY (`StudentID`) ,
  CONSTRAINT `fk_Student_User1`
    FOREIGN KEY (`StudentID` )
    REFERENCES `User` (`StudentID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_Student_User2`
    FOREIGN KEY (`UserID`)
    REFERENCES `User` (`UserID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
ENGINE = InnoDB
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
DROP TRIGGER IF EXISTS after_insert_user
--------------

Query OK, 0 rows affected, 1 warning (0.00 sec)

--------------
CREATE TRIGGER after_insert_user
AFTER INSERT ON `User`
FOR EACH ROW BEGIN
    IF (NEW.StudentID IS NOT NULL) THEN
        INSERT INTO Student VALUES (NEW.StudentID, NEW.UserID);
    END IF;
END;
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
INSERT INTO User VALUES (NULL, 'first', 'last', 'email', 123)
--------------

Query OK, 1 row affected (0.01 sec)

--------------
SELECT * FROM Student
--------------

+-----------+--------+
| StudentID | UserID |
+-----------+--------+
|       123 |      1 |
+-----------+--------+
1 row in set (0.00 sec)

Bye
ross@pv1:~$ 
ross@pv1:~$mysql-vvv<15034839.sql
--------------
删除表(如果存在)`Student`
--------------
查询正常,0行受影响(0.00秒)
--------------
删除表(如果存在)`User`
--------------
查询正常,0行受影响(0.01秒)
--------------
如果“用户”不存在,则创建表(
`UserID`INT非空自动增量,
`FirstName`VARCHAR(45)不为空,
`LastName`VARCHAR(45)不为空,
`电子邮件'VARCHAR(60)不为空,
`StudentID`INT NULL,
密钥ix_用户_学生ID(学生ID),
主键(`UserID`)
)
引擎=InnoDB
--------------
查询正常,0行受影响(0.00秒)
--------------
如果不存在“学生”,则创建表(
`StudentID`INT不为空,
`UserID`INT不为空,
主键(`StudentID`),
约束“fk_学生_用户1”`
外键(`StudentID`)
引用`User`(`StudentID`)
关于删除级联
在更新级联上,
约束“fk_学生_用户2”`
外键(`UserID`)
引用`User`(`UserID`)
关于删除级联
关于更新级联
)
引擎=InnoDB
--------------
查询正常,0行受影响(0.00秒)
--------------
如果在插入用户后存在,则丢弃触发器
--------------
查询正常,0行受影响,1条警告(0.00秒)
--------------
在插入用户后创建触发器
在`用户'上插入后`
每行开始
如果(NEW.StudentID不为NULL),则
插入学生值(NEW.StudentID、NEW.UserID);
如果结束;
结束;
--------------
查询正常,0行受影响(0.00秒)
--------------
插入到用户值中(NULL、“第一个”、“最后一个”、“电子邮件”123)
--------------
查询正常,1行受影响(0.01秒)
--------------
从学生中选择*
--------------
+-----------+--------+
|学生ID |用户ID|
+-----------+--------+
|       123 |      1 |
+-----------+--------+
一行一组(0.00秒)
拜伊
ross@pv1:~$ 
它确实需要是后触发器,但是

IF (NEW.StudentID <> NULL) THEN
或者更神秘的是:

IF (NOT IFNULL(NEW.StudentID)) THEN
或者更深奥的:

IF (NOT NEW.StudentID <=> NULL) THEN
如果(不是NEW.StudentID NULL),则
以下是实际行动:

ross@pv1:~$ mysql -vvv < 15034839.sql 
--------------
DROP TABLE IF EXISTS `Student`
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
DROP TABLE IF EXISTS `User`
--------------

Query OK, 0 rows affected (0.01 sec)

--------------
CREATE  TABLE IF NOT EXISTS `User` (
  `UserID` INT NOT NULL AUTO_INCREMENT ,
  `FirstName` VARCHAR(45) NOT NULL ,
  `LastName` VARCHAR(45) NOT NULL ,
  `eMail` VARCHAR(60) NOT NULL ,
  `StudentID` INT NULL ,
  KEY ix_User_StudentID (StudentID),
  PRIMARY KEY (`UserID`)
)
ENGINE = InnoDB
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
CREATE  TABLE IF NOT EXISTS `Student` (
  `StudentID` INT NOT NULL ,
  `UserID` INT NOT NULL ,
  PRIMARY KEY (`StudentID`) ,
  CONSTRAINT `fk_Student_User1`
    FOREIGN KEY (`StudentID` )
    REFERENCES `User` (`StudentID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_Student_User2`
    FOREIGN KEY (`UserID`)
    REFERENCES `User` (`UserID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
ENGINE = InnoDB
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
DROP TRIGGER IF EXISTS after_insert_user
--------------

Query OK, 0 rows affected, 1 warning (0.00 sec)

--------------
CREATE TRIGGER after_insert_user
AFTER INSERT ON `User`
FOR EACH ROW BEGIN
    IF (NEW.StudentID IS NOT NULL) THEN
        INSERT INTO Student VALUES (NEW.StudentID, NEW.UserID);
    END IF;
END;
--------------

Query OK, 0 rows affected (0.00 sec)

--------------
INSERT INTO User VALUES (NULL, 'first', 'last', 'email', 123)
--------------

Query OK, 1 row affected (0.01 sec)

--------------
SELECT * FROM Student
--------------

+-----------+--------+
| StudentID | UserID |
+-----------+--------+
|       123 |      1 |
+-----------+--------+
1 row in set (0.00 sec)

Bye
ross@pv1:~$ 
ross@pv1:~$mysql-vvv<15034839.sql
--------------
删除表(如果存在)`Student`
--------------
查询正常,0行受影响(0.00秒)
--------------
删除表(如果存在)`User`
--------------
查询正常,0行受影响(0.01秒)
--------------
如果“用户”不存在,则创建表(
`UserID`INT非空自动增量,
`FirstName`VARCHAR(45)不为空,
`LastName`VARCHAR(45)不为空,
`电子邮件'VARCHAR(60)不为空,
`StudentID`INT NULL,
密钥ix_用户_学生ID(学生ID),
主键(`UserID`)
)
引擎=InnoDB
--------------
查询正常,0行受影响(0.00秒)
--------------
如果不存在“学生”,则创建表(
`StudentID`INT不为空,
`UserID`INT不为空,
主键(`StudentID`),
约束“fk_学生_用户1”`
外键(`StudentID`)
引用`User`(`StudentID`)
关于删除级联
在更新级联上,
约束“fk_学生_用户2”`
外键(`UserID`)
引用`User`(`UserID`)
关于删除级联
关于更新级联
)
引擎=InnoDB
--------------
查询正常,0行受影响(0.00秒)
--------------
如果在插入用户后存在,则丢弃触发器
--------------
查询正常,0行受影响,1条警告(0.00秒)
--------------
在插入用户后创建触发器
在`用户'上插入后`
每行开始
如果(NEW.StudentID不为NULL),则
插入学生值(NEW.StudentID、NEW.UserID);
如果结束;
结束;
--------------
查询正常,0行受影响(0.00秒)
--------------
插入到用户值中(NULL、“第一个”、“最后一个”、“电子邮件”123)
--------------
查询正常,1行受影响(0.01秒)
--------------
从学生中选择*
--------------
+-----------+--------+
|学生ID |用户ID|
+-----------+--------+
|       123 |      1 |
+-----------+--------+
一行一组(0.00秒)
拜伊
ross@pv1:~$ 

插入后不能使用,必须在插入前使用INSERT@Winston我以前试过插入,但没有成功。使用插入前与插入后相比,是否需要对触发器进行任何其他语法更改?不能使用插入后,必须使用插入前INSERT@Winston我以前试过插入,但没有成功。使用插入前和插入后相比,是否需要对触发器进行任何其他语法更改?谢谢