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

t q*_*t q 8 mysql sql

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

尝试插入忽略但不起作用

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

表看起来像:

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$$
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 11

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

INSERT INTO mytable (myid, theirid) 
  VALUES (5, 1) ;
Run Code Online (Sandbox Code Playgroud)

并忽略产品警告(或替换上面的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
        ) ; 
Run Code Online (Sandbox Code Playgroud)