我正在尝试执行以下查询:
INSERT INTO table_listnames (name, address, tele)
VALUES ('Rupert', 'Somewhere', '022')
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name='value'
);
但是这会返回一个错误。基本上我不想插入一个记录,如果记录的“名称”字段已经存在于另一个记录-如何检查新名称是否唯一?
我正在尝试执行以下查询:
INSERT INTO table_listnames (name, address, tele)
VALUES ('Rupert', 'Somewhere', '022')
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name='value'
);
但是这会返回一个错误。基本上我不想插入一个记录,如果记录的“名称”字段已经存在于另一个记录-如何检查新名称是否唯一?
当前回答
这个查询很有效:
INSERT INTO `user` ( `username` , `password` )
SELECT * FROM (SELECT 'ersks', md5( 'Nepal' )) AS tmp
WHERE NOT EXISTS (SELECT `username` FROM `user` WHERE `username` = 'ersks'
AND `password` = md5( 'Nepal' )) LIMIT 1
你可以使用下面的查询来创建表:
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`password` varchar(32) NOT NULL,
`status` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
注意:在尝试使用第一个查询之前,使用第二个查询创建表。
其他回答
INSERT IGNORE INTO `mytable`
SET `field0` = '2',
`field1` = 12345,
`field2` = 12678;
这里的mysql查询,即插入记录,如果不存在,将忽略现有的类似记录。
----Untested----
INSERT不允许语法中的WHERE。
你可以做的是:在字段上创建一个UNIQUE INDEX,它应该是唯一的(name),然后使用:
正常插入(如果名称已经存在,则处理错误) INSERT IGNORE(如果name已经存在,将无声失败,导致警告(而不是错误)) 插入……ON DUPLICATE KEY UPDATE(如果名称已经存在,将在末尾执行UPDATE,请参阅文档)
我遇到了一个问题,迈克建议的方法部分有效,我有一个错误复制列名= '0',并更改了您的查询的语法如下'
$tQ = "INSERT INTO names (name_id, surname_id, sum, sum2, sum3,sum4,sum5)
SELECT '$name', '$surname', '$sum', '$sum2', '$sum3','$sum4','$sum5'
FROM DUAL
WHERE NOT EXISTS (
SELECT sum FROM names WHERE name_id = '$name'
AND surname_id = '$surname') LIMIT 1;";
问题出在列名上。sum3等于sum4, mysql抛出重复的列名,我用这种语法写了代码,它工作得很好,
您正在插入而不是更新结果。 您可以在主列中定义名称列或将其设置为惟一的。
我有一个类似的问题,我需要插入多个如果不存在。所以从上面的例子中,我得出了这个组合……放在这里,以防有人需要。
注意: 我必须在MSSQL要求的地方定义name…MySQL也使用*。
INSERT INTO names (name)
SELECT name
FROM
(
SELECT name
FROM
(
SELECT 'Test 4' as name
) AS tmp_single
WHERE NOT EXISTS
(
SELECT name FROM names WHERE name = 'Test 4'
)
UNION ALL
SELECT name
FROM
(
SELECT 'Test 5' as name
) AS tmp_single
WHERE NOT EXISTS
(
SELECT name FROM names WHERE name = 'Test 5'
)
) tmp_all;
MySQL: 创建表名( OID int(11) NOT NULL AUTO_INCREMENT name varchar(32) COLLATE utf8_unicode_ci NOT NULL 主键oid, 唯一键名称 InnoDB AUTO_INCREMENT=1;
or
该软件: 创建表[names] ( [oid] int identity (1,1) not null, [name] NVARCHAR (32) NOT NULL, 主键集群化([oid] asc) ); 创建唯一的非聚集索引[Index_Names_Name] ON [names]([name] ASC);