当前位置: 首页 > 面试题库 >

MySQL INSERT(如果不存在)(不使用主键)

陈宏胜
2023-03-14
问题内容

如果该 不存在,如何插入一行?
*注意这些不是主键,我的主键设置为自动增量,

尝试插入时忽略但不起作用

INSERT IGNORE INTO mytable (`myid`, `theirid`) VALUES ('5', '1')
ON DUPLICATE KEY <DO NOTHING>

表格看起来像:

CREATE TABLE `mytable` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    `myid` bigint(20) NOT NULL,
    `theirid` bigint(20) NOT NULL,
    `activated` tinyint(1) NOT NULL DEFAULT '0',
    `dateStamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1$$

问题答案:

1)您可以在上添加UNIQUE约束(myid, theirid)吗?如果是,请添加此约束并使用:

INSERT INTO mytable (myid, theirid) 
  VALUES (5, 1) ;

并忽略产生警告(或将替换为INSERT IGNORE

2)如果您不能添加这样的约束(例如,有时您希望允许这样的重复项而其他时候则不允许),则可以使用以下方法:

INSERT INTO mytable (myid, theirid) 
  SELECT 5, 1 
  FROM dual 
  WHERE NOT EXISTS
        ( SELECT *
          FROM mytable
          WHERE myid = 5
            AND theirid = 1
        ) ;


 类似资料:
  • 问题内容: 如果两个值都不存在,如何推入数组?这是我的数组: 如果我尝试使用或再次将其推入数组,我什么都不希望发生…但是如果这两个都不存在,那么我希望它 我怎样才能做到这一点? 问题答案: 您可以使用自定义方法扩展Array原型:

  • 我想解析可能有也可能没有DTD的XML文档。如果有一个DTD,那么我想用它来展开实体引用。如果没有DTD(更严格地说,如果没有DOCTYPE声明),我只想忽略DTD处理。 当我设置时,分析包含实体引用的文档失败,因为实体被视为未声明的。 当我设置时,对没有DOCTYPE声明的文档的解析将失败,诊断结果相当模糊:

  • 问题内容: 我有以下代码: 而且我只想在此列不存在的情况下更改此表。 我正在尝试许多不同的方法,但是没有任何效果: 附带程序: 我在END IF中出错,然后在END中又在1中出错 我怎样才能使它尽可能简单? 问题答案: 在存储过程中使用以下命令:

  • 错误为: Msg 156,Level 15,State 1,Procedure EmailsRecebidosInsert,Line 11 关键字“where”附近的语法不正确。

  • 问题内容: 我有下表: 如果给定的ID不存在,我想插入具有默认Val的ID。但是,如果它已经存在,我想增加Val的值。 我有以下代码: 并且它可以工作,但是我想用一个SQL语句来完成。我可以吗? 编辑 : 从@ Xikinho90的答案,我的最终代码是 问题答案: 您可以使用插入或替换。 我认为这可以解决问题 您只需要用输入的ID替换数字 谢谢奇科

  • 问题内容: 如果目录不存在,这是创建目录的正确方法吗?它应该对该脚本具有完全的权限,并且可以被其他人读取。 问题答案: