MySQL 插入不存在的地方不起作用

标签 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 
        (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_insert_id 获取的值将没有任何意义。

通过在x,y,z上放置一个唯一的键并使用insertignore,你会得到更好的服务。尽管这仍然不会给你记录# 。

<小时/>

阅读thisthis了解有关实现此功能的更多信息。

关于MySQL 插入不存在的地方不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450387/

相关文章:

regex - 如何使用正则表达式限制在 perl 上找到的匹配项?

linux - 删除第 1 列和第 2 列中具有相同字符串的行

php - 单次插入大数据还是每次循环插入大数据?

php - 如何从头开始在 Laravel 5.4 中实现 OAuth 2.0

PERL 如何将本地时间格式转换为 unixtime

php - 将表单数据插入MySQL数据库表

ios - 值在数据库中插入两次

mysql - 使用 SpringMvc hibernate MySql 和 maven 的基本 CRUD 应用程序

mysql - 如何锁定 MySQL 中的一行?

php - mysql:将插入的受影响行获取到临时表