简体   繁体   English

触发mysql sql

[英]Triggers mysql sql

Whats wrong with this code? 此代码有什么问题?

CREATE TRIGGER User_trigger AFTER DELETE ON users
   FOR EACH ROW
BEGIN
   INSERT INTO del_users ('fullname') VALUES ('fullname');
END;

Please help. 请帮忙。

There are several issues: 有几个问题:

  1. If you use BEGIN ... END block you have to change DELIMITER . 如果使用BEGIN ... END块,则必须更改DELIMITER On the other hand if your trigger contains only one statement just don't use BEGIN ... END . 另一方面,如果您的触发器仅包含一个语句,请不要使用BEGIN ... END Take a closer look at Defining Stored Programs 仔细看一下定义存储程序
  2. In MySQL to be able to refer to columns of a row being deleted you have to use OLD keyword. 在MySQL中,为了能够引用要删除的行的列,您必须使用OLD关键字。 Take a closer look at Trigger Syntax and Examples 详细了解触发器语法和示例

That being said and assuming that your simplified table schema look something like this 话虽如此,并假设您的简化表架构看起来像这样

CREATE TABLE users
(
  id int not null auto_increment primary key,
  fullname varchar(8)
);
CREATE TABLE del_users
(
  id int not null auto_increment primary key, 
  user_id int, fullname varchar(32),
  deleted datetime
);

Your trigger would look 您的触发器看起来

CREATE TRIGGER tg_ad_users 
AFTER DELETE ON users
FOR EACH ROW
  INSERT INTO del_users (user_id, fullname, deleted)
  VALUES (OLD.id, OLD.fullname, NOW());

Here is SQLFiddle demo 这是SQLFiddle演示

or with BEGIN ... END block 或使用BEGIN ... END

DELIMITER //
CREATE TRIGGER tg_ad_users 
AFTER DELETE ON users
FOR EACH ROW
BEGIN
  INSERT INTO del_users (user_id, fullname, deleted)
  VALUES (OLD.id, OLD.fullname, NOW());
END//
DELIMITER ;

Here is SQLFiddle demo 这是SQLFiddle演示

Try the following: 请尝试以下操作:

CREATE TRIGGER User_trigger AFTER DELETE 
ON users
AS
    INSERT INTO del_users (fullname) 
    SELECT d.fullname from Deleted d

Here is information on using the DELETED and INSERTED Tables: 这是有关使用DELETED和INSERTED表的信息:

http://technet.microsoft.com/en-us/library/ms191300.aspx http://technet.microsoft.com/en-us/library/ms191300.aspx

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM