Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
触发在mysql中为类时间表复制同一表中的行_Mysql_Triggers_Duplicates_Rows - Fatal编程技术网

触发在mysql中为类时间表复制同一表中的行

触发在mysql中为类时间表复制同一表中的行,mysql,triggers,duplicates,rows,Mysql,Triggers,Duplicates,Rows,我正在做一张课表。有5节课,每节课每周一次。我有两张桌子,一张课表和一张课表 我正试图触发一个触发器,该行将在同一个表上重复,但在不同的日期输入。我还需要在插入后删除该行 到目前为止,我有: DROP TRIGGER IF EXISTS `erase`// CREATE TRIGGER `erase` BEFORE DELETE ON `flsch` FOR EACH ROW INSERT INTO flsch SELECT * FROM flsch WHERE DATE_ID=old.DAT

我正在做一张课表。有5节课,每节课每周一次。我有两张桌子,一张课表和一张课表

我正试图触发一个触发器,该行将在同一个表上重复,但在不同的日期输入。我还需要在插入后删除该行

到目前为止,我有:

DROP TRIGGER IF EXISTS `erase`// 
CREATE TRIGGER `erase` BEFORE DELETE ON `flsch`
FOR EACH ROW INSERT INTO flsch SELECT * FROM flsch WHERE DATE_ID=old.DATE_ID
有什么办法可以做到这一点吗

@Devart我已按照以下要求添加了新代码:

DELIMITER $$

 CREATE PROCEDURE add_f(IN param_DATEID TIMESTAMP, IN param_SNO VARCHAR(6), IN param_sub VARCHAR(20), IN param_SCHD INT(4))


BEGIN
IF SNO ='math01'
INSERT INTO schtt VALUES(param_DATEID, param_SNO, param_SUB, param_SCHD);
INSERT INTO schtt VALUES(param_DATEID + INTERVAL 7 DAY, param_SNO, param_SUB, param_SCHD);
END IF;

ELSE IF SNO='eng101'

INSERT INTO schtt VALUES(param_DATEID, param_SNO, param_SUB, param_SCHD);
INSERT INTO schtt VALUES((param_DATEID + INTERVAL 1 DAY) + INTERVAL 7 DAY, param_SNO, param_SUB, param_SCHD);
END IF;
END 

$$

DELIMITER ; 

我是否可以输入一个字符串,该字符串将在某个日期后通过过程删除记录,或者只能通过触发器执行该操作?由于限制,在触发器的帮助下无法执行此操作-在存储函数或触发器中,不允许修改已在使用的表(用于读取或写入)通过调用函数或触发器的语句

编写一个存储过程来执行逻辑或在应用程序中执行


好的,假设我们有一个表,并且我们需要添加一个记录和具有不同日期的重复记录,存储过程可以帮助我们:

CREATE TABLE table1 (
  name VARCHAR(255) DEFAULT NULL,
  dt DATE DEFAULT NULL
);

DELIMITER $$

CREATE PROCEDURE add_two_records(IN param_name VARCHAR(255), IN param_dt DATE)
BEGIN
  INSERT INTO table1 VALUES(param_name, param_dt);
  INSERT INTO table1 VALUES(param_name, param_dt + INTERVAL 1 DAY);
END
$$

DELIMITER ;
添加记录:

CALL add_two_records('Rick', '2012-01-16');
让我们检查一下结果:

SELECT * FROM table1;
+------+------------+
| name | dt         |
+------+------------+
| Rick | 2012-01-16 |
| Rick | 2012-01-17 |
+------+------------+

语法错误修复:

DELIMITER $$

CREATE PROCEDURE add_f(IN param_DATEID TIMESTAMP, IN param_SNO VARCHAR(6), IN param_sub VARCHAR(20), IN param_SCHD INT(4))
BEGIN
IF param_SNO ='math01' THEN
  INSERT INTO schtt VALUES(param_DATEID, param_SNO, param_SUB, param_SCHD);
  INSERT INTO schtt VALUES(param_DATEID + INTERVAL 7 DAY, param_SNO, param_SUB, param_SCHD);
ELSE IF param_SNO='eng101' THEN
  INSERT INTO schtt VALUES(param_DATEID, param_SNO, param_SUB, param_SCHD);
  INSERT INTO schtt VALUES((param_DATEID + INTERVAL 1 DAY) + INTERVAL 7 DAY, param_SNO, param_SUB, param_SCHD);

  -- You can use this one -
  -- INSERT INTO schtt VALUES(param_DATEID + INTERVAL 8 DAY, param_SNO, param_SUB, param_SCHD);
END IF;

END$$

DELIMITER ; 
你问:

我是否可以输入一个字符串,该字符串将在某个日期后使用过程删除记录


是的,您可以使用DELETE语句+WHERE子句来完成

我是MySQL的新手。你能更深入地解释一下吗。。谢谢:)谢谢@Devart这真的很有帮助,谢谢你的解释。我只是在设置subject_ID时遇到了一点麻烦。我想让这个过程将记录插入到subject_ID='math01'。。但当我在schtt值中插入subject_id='BG0002'(DATE_id+INTERVAL 1 DAY,subject_id,teacher,sched_TIME);'时,会发现一个语法错误代码’如果我在程序中使用“代码”select*from schtt’代码,我将能够读取当前表信息并复制到新记录中。如果要插入同一表中的记录,则可以使用insert…select语句,例如insert into schtt select SUMBER_id,date+schtt间隔1天,其中SUMBER_id=1;语句语法-我在将当前日期输入日期id时间戳字段时遇到一些困难。我尝试使用SET和函数(如NOW()将DATE_ID定义为默认值)。但它们没有起作用。时间戳显示为0000-00-00 0000。我试图让它显示当前时间,然后根据当前时间添加下一行7天。有人能告诉我哪里出了问题吗?谢谢:)它应该与时间戳日期类型一起工作。可能是出了什么问题,试着找出一个错误。或提供显示问题的信息(创建表格、创建过程等)