我正在尝试执行以下查询:
INSERT INTO table_listnames (name, address, tele)
VALUES ('Rupert', 'Somewhere', '022')
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name='value'
);
Run Code Online (Sandbox Code Playgroud)
但这会返回错误.基本上我不想插入记录,如果记录的'name'字段已存在于另一条记录中 - 如何检查新名称是否唯一?
我正在尝试完成此查询; 我的标记字段设置为UNIQUE,我只是希望数据库忽略任何重复的标记.
INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c')
ON DUPLICATE KEY IGNORE '*the offending tag and carry on*'
Run Code Online (Sandbox Code Playgroud)
甚至这是可以接受的
INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c')
ON DUPLICATE KEY UPDATE '*the offending tag and carry on*'
Run Code Online (Sandbox Code Playgroud) 某些SQL服务器具有一个功能,INSERT
如果它违反主/唯一键约束,则跳过该功能.例如,MySQL有INSERT IGNORE
.
什么是模仿的最好方式INSERT IGNORE
,并ON DUPLICATE KEY UPDATE
与PostgreSQL的?
这是一个如此简单的问题,但我没有在任何地方找到答案2小时.
你如何使用MYSQL IF语句.无论我放入什么都行不通.在SQL Server中,这是一个5秒的工作.
是否需要在程序中?
你能在IF语句中使用SELECT吗?
这里对IF函数不太感兴趣.
谢谢你的帮助.
我有一个mysql表ip_list
...
+----+---------------+
| id | ip_addr |
+----+---------------+
| 1 | 192.168.100.1 |
| 2 | 192.168.100.2 |
| 3 | 192.168.100.3 |
| 4 | 192.168.100.4 |
| 5 | 192.168.100.5 |
+----+---------------+
Run Code Online (Sandbox Code Playgroud)
我想只添加不在ip_addr
列中的记录.
对于前者
我有以下记录添加到ip_addr
表中
192.168.100.6
192.168.100.10
192.168.100.11
192.168.100.1 //already in column
192.168.100.12
Run Code Online (Sandbox Code Playgroud)
我不想添加192.168.100.1
,因为它已经在列中.
那么,INSERT
查询是否有可能首先检查记录然后插入它?
目前,我正在这样做..首先我SELECT
记录然后匹配它然后INSERT
它.
但是,我只想做一个查询.
我试着谷歌搜索这个问题,但只找到如何使用两个表,如下所示,
INSERT INTO tbl_member
SELECT Field1,Field2,Field3,...
FROM temp_table
WHERE NOT EXISTS(SELECT *
FROM tbl_member
WHERE (temp_table.Field1=tbl_member.Field1 and
temp_table.Field2=tbl_member.Field2...etc.)
)
Run Code Online (Sandbox Code Playgroud)
这适用于一种情况,但现在我的兴趣是直接从程序本身上传数据而不使用两个表.我想要的是上传不在表中的数据.我脑子里的sql就像下面那样,
INSERT INTO tbl_member (SensorIdValue, DataTimeValue, DataInValue, IncompleteValue, SpiValue, InfoValue)
VALUES ('Sensor.org', '20121017150103', 'eth0','','','')
WHERE (SensorIdValue != 'Sensor.org'AND DataTimeValue != '20121017150103'AND DataInValue != 'eth0'AND IncompleteValue != ''AND SpiValue != ''AND InfoValue != '');
Run Code Online (Sandbox Code Playgroud)
但这是错的..我可能知道这样做的正确方法,非常感谢:)
如何通过选择插入时插入表格之前如何检查重复项:
insert into table1
select col1, col2
from table2
Run Code Online (Sandbox Code Playgroud)
我需要检查table1是否已经有一行table1.col1.value = table2.col1.value,如果是,则从插入中排除该行.
我正在使用和使用MySQL作为后端引擎的软件(它可以使用其他如PostgreSQL或Oracle或SQLite,但这是我们正在使用的主要应用程序).该软件的设计方式使得我们要访问的二进制数据在各列中保持为BLOB(每个表有一个BLOB列,其他列有整数/浮点数来表征BLOB,另一列有BLOB的字符串列)MD5哈希).这些表通常有2,3或4个索引,其中一个索引始终是MD5列UNIQUE
.有些表已经有数百万个条目,并且它们已经输入了数千兆字节的大小.我们在同一台服务器中保留了每年独立的MySQL数据库(到目前为止).对于一般应用程序(Dell PowerEdge 2U格式服务器),硬件非常合理(我认为).
MySQL SELECT
查询相对较快.那里几乎没有抱怨,因为这些是(大部分时间)处于批处理模式.但是,INSERT
查询需要很长时间,随着表大小(行数)的增加而增加.不可否认,这是因为MD5列是类型的UNIQUE
,因此每个INSERT
都必须弄清楚每个新行是否具有相应的,已经插入的MD5字符串.如果有其他索引(不是唯一的),如果性能变差,那就不奇怪了(我认为).但是我仍然不能放下心来这个软件架构的选择(我怀疑BLOB在表行而不是磁盘中有显着的负面影响)并不是最好的选择.插入并不重要,但这是一种烦人的感觉.
有没有人有类似情况的经验?使用MySQL,甚至是其他(最好是基于Linux的)RDBM?你想提供的任何见解,也许是一些表现数据?
顺便说一句,工作语言是C++(它包含C调用MySQL的API).
可能重复:
如何在MySQL中"插入,如果不存在"?
有SQL表:
CREATE TABLE IF NOT EXISTS `MyTable` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`MyVar` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
)
Run Code Online (Sandbox Code Playgroud)
并且有两个PHP数组arr1[]=array("abc","bcd")
和arr2[]=array("abc","cde")
.
假设我已将arr1 []值保存到SQL表中.现在让我们假设我需要将arr2 []值保存到同一个SQL表中.我需要编写哪个SQL INSERT查询以避免重复保存"abc"条目?结果必须是:
MyTable:
1 | abc
2 | bcd
3 | cde
Run Code Online (Sandbox Code Playgroud)
但不是:
MyTable:
1 | abc
2 | bcd
3 | abc
4 | cde
Run Code Online (Sandbox Code Playgroud)
更新:也许应该以这样的方式创建/定义MyTable,以便忽略重复的条目?
$sql = "INSERT INTO toplist
(serverName, serverPassword, serverIp, serverPort, serverBanner,
serverShortDescription, serverDescription)
VALUES
('$_POST[serverName]', '$_POST[serverPassword]', '$_POST[serverIp]',
'$_POST[serverPort]', '$_POST[serverBanner]',
'$_POST[serverShortDescription]', '$_POST[serverDescription]')";
if (!mysql_query($sql, $con)) {
die('Error: ' . mysql_error());
}
echo "The server " . $_POST[serverName] . "," . $_POST[serverIp]
. " has been added.";
mysql_close($con);
Run Code Online (Sandbox Code Playgroud)
我怎样才能这样做,如果条目"serverIp"尚不存在,它将把它添加到数据库,如果它已经存在,那么它什么都不做.此外,这也是区分大小写的吗?你是否可以绕过它,因为它有什么好处?
mysql ×7
sql ×4
insert ×3
php ×3
database ×2
if-statement ×1
indexing ×1
performance ×1
postgresql ×1
rules ×1
sql-insert ×1
sql-server ×1
t-sql ×1
where-clause ×1