Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
无法在phpmyadmin的mysql中创建触发器_Mysql_Triggers_Phpmyadmin - Fatal编程技术网

无法在phpmyadmin的mysql中创建触发器

无法在phpmyadmin的mysql中创建触发器,mysql,triggers,phpmyadmin,Mysql,Triggers,Phpmyadmin,在phpmyadmin中将一行插入数据库后,我试图通过组合字段来创建一个ID。我在以下触发器语句的第3行得到一个错误: DROP TRIGGER IF EXISTS `scanID2`; CREATE DEFINER=`root`@`localhost` TRIGGER `scanID2` AFTER INSERT ON db_name.`scan_data` FOR EACH ROW BEGIN UPDATE db_name.scan_data SET @data1 = conca

在phpmyadmin中将一行插入数据库后,我试图通过组合字段来创建一个ID。我在以下触发器语句的第3行得到一个错误:

DROP TRIGGER IF EXISTS `scanID2`;
CREATE DEFINER=`root`@`localhost` 
TRIGGER `scanID2` 
AFTER INSERT ON db_name.`scan_data` 
FOR EACH ROW 
BEGIN 
UPDATE db_name.scan_data 
SET @data1 = concat(RIGHT(scanContent,2), RIGHT(operatorID,2), RIGHT(deviceID,2), RIGHT (scanDate, '-', ''), REPLACE (scanTime, ':', ''));
INSERT INTO db_name.scan_data(scanID) VALUES (@data1);
END
//
错误是:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE DEFINER=`root`@`localhost`
TRIGGER `scanID2`
AFTER INSERT ON db_name' at line 2 
好的,所以我想到了如何执行查询。触发器已经被创建,但我不认为它做了它应该做的。记录不会更新。以下是新代码:

BEGIN 
SET @data1 = concat(RIGHT(scanContent,2), RIGHT(operatorID,2), RIGHT(deviceID,2), REPLACE (scanDate, '-', ''), REPLACE (scanTime, ':', ''));
INSERT INTO vacseen1_connect.scan_data(scanID) VALUES (@data1);
END

有几件事需要考虑:

  • 对触发器使用
    之前的
    事件,而不是
    之后的
    。这样,您可以在插入行的同时设置
    scanID
    的值
  • 使用
    NEW
    关键字访问插入行的字段
  • 由于它是一个语句触发器,现在您不需要更改分隔符并使用
    BEGIN。。。结束
  • 您很可能打算对scanDate使用
    REPLACE
  • 试一试

    创建触发器scanID2
    在扫描数据上插入之前
    每行
    设置NEW.scanID=CONCAT(
    右(NEW.scanContent,2),
    右(新的操作员ID,2),
    右(新设备ID,2),
    替换(新的。斯堪的纳特,“-”,“),
    替换(NEW.scanTime“:”,“”)
    );
    

    这是一个演示

    错误消息是什么?还提供完整的触发器语句您仍然需要在触发器内终止语句,即使用分号。我不知道你想用update语句做什么。它是什么类型的触发器?我希望“scanID”是来自scanContent、operatorID、deviceID、ScanState和scanTime的数字组合。我正在从android设备获取这些详细信息,并在scanID列中插入一个包含这些详细信息的空白“”。插入后,我希望使用新创建行的触发器更新表。请求您的输入MySQL\u Rockstar和pale\u。我已经为此挣扎了两天了。