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
不存在的MySQL插入不起作用_Mysql_Perl_Insert_Not Exists - Fatal编程技术网

不存在的MySQL插入不起作用

不存在的MySQL插入不起作用,mysql,perl,insert,not-exists,Mysql,Perl,Insert,Not Exists,下面粘贴的是我的MySQL存储过程 CREATE PROCEDURE `newrig`( IN x varchar(10), IN y varchar (10), IN z varchar(5), OUT a INT ) BEGIN INSERT INTO rig (Name, Model,Type) SELECT * from (SELECT x,y,z) as tmp WHERE NOT EXISTS (SE

下面粘贴的是我的MySQL存储过程

CREATE PROCEDURE `newrig`(
  IN x varchar(10),
  IN y varchar (10),
  IN z varchar(5),
  OUT a INT
)
BEGIN

        INSERT INTO rig (Name, Model,Type)
        SELECT * from (SELECT x,y,z) as tmp
        WHERE NOT EXISTS 
        (SELECT * FROM rig where Name=x
        AND Model=y
        AND Type=z);    
        SELECT LAST_INSERT_ID() INTO a;

END
这就是我从perl中调用它的方式

$hDb->do( "call newrig( 'krish','xx','j',\@a);" ); 
结果是,;它不会将数据插入表中。有人能帮忙吗?

首先:

INSERT INTO rig (Name, Model,Type) values (x,y,z)
    WHERE NOT EXISTS 
    (SELECT * FROM rig where Name=x
    AND Model=y
    AND Type=z);
请注意,如果记录已经存在,则为
last\u insert\u id
获取的值将毫无意义

x,y,z
上放置一个唯一的键并使用
insert ignore
会更好地为您服务。。尽管这仍然不能给你记录



阅读并获取更多有关此操作的信息。

第一个猜测是表中已经存在值。MySQL需要在“values(x,y,z)”后加一个分号和一个END。如果没有where not exists条款,它对我就不起作用。如果记录存在,插入忽略技术将要求我检查最后一个插入id。此外,如果我的主键设置为自动递增,并且PK是记录的唯一键,我想知道插入忽略是否会忽略插入。