我正在尝试将新行插入MySQL表中,但前提是我插入的其中一个值不在表中已经存在的行中。
例如,如果我正在做:
insert into `mytable` (`id`, `name`) values (10, `Fred`)
我希望能够检查表中的任何其他行是否已经name = 'Fred'
。怎么办呢?
谢谢!
修改
我尝试了什么(不能发布确切的声明,但这里是一个表示):
INSERT IGNORE INTO mytable (`domain`, `id`)
VALUES ('i.imgur.com', '12gfa')
WHERE '12gfa' not in (
select id from mytable
)
抛出错误:
#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 'WHERE '12gfa' not in ( select id from mytable)' at line 3
答案 0 :(得分:1)
首先,您的id
字段应为autoincrement
,除非它是外键(但我不能从您在问题中插入的代码中假设它)。
通过这种方式,您可以确保为每行id
提供唯一值。
如果不是这种情况,您应该为表格创建一个主键,其中包含 ALL 您不想复制的字段并使用INSERT IGNORE
命令。
Here's a good read关于你想要实现的目标。
答案 1 :(得分:0)
你可以使用这样的东西
INSERT INTO someTable (someField, someOtherField)
VALUES ("someData", "someOtherData")
ON DUPLICATE KEY UPDATE someOtherField=VALUES("betterData");
这将插入一个新行,除非已经存在一个带有重复键的行,它将更新它。
答案 2 :(得分:0)
DELIMITER |
CREATE PROCEDURE tbl_update (IN id INT, IN nm VARCHAR(15))
BEGIN
DECLARE exst INT;
SELECT count(name) INTO exst FROM mytable WHERE name = nm;
IF exst = 0 THEN
INSERT INTO mytable VALUES(id, name);
END IF;
END
|
DELIMITER ;
或只是将属性名称设为UNIQUE