SQL插入行(如果不存在)

时间:2011-07-12 18:01:02

标签: php mysql sql

我对mySQL非常陌生,请耐心等待。

我有一个总是在增长的数组,现在可以说它有4个项目。我需要sql来搜索表并为数组中的每个项插入一个新行,但前提是它是一个新项(意味着它尚未插入)。表中有5列,行中的每个项都需要是变量,因此我可以传递动态数据。

我知道这很遥远,但我现在拥有的是这样的。

$array_count = array(1,2,3,4);
$var1 = 'value 1';
$var2 = 'value 2';
$var3 = 'value 3';
$var4 = 'value 4';
$var5 = 'value 5';
$sql = "INSERT INTO membership_levels VALUES ('".$var1."', '".$var2."', '".$var3."', '".$var4."', '".$var5."')";

3 个答案:

答案 0 :(得分:4)

Mysql - ON DUPLICATE KEY

如果您的数据库是MySql,您可以像Brad Christie一样使用Insert On Duplicate编写。如果只想在它们全部具有相同值时插入,则需要在5列上有一个主键。

您的$ sql将更改为:

$sql = "INSERT INTO membership_levels(a,b,c,d) VALUES VALUES ('".$var1."', '".$var2."', '".$var3."', '".$var4."', '".$var5."')
               ON DUPLICATE KEY UPDATE a=VALUES(a), b=VALUES(b), c = VALUES(c), d = VALUES (d);"

Mysql - 替换

您也可以使用Replace key word。如果该行存在,它将为您删除它并插入新行。

$sql = "REPLACE INTO membership_levels VALUES ('".$var1."', '".$var2."', '".$var3."', '".$var4."', '".$var5."')";

MSSQL

如果您的数据库是MsSql(Sql server),则它是2个查询:

IF EXISTS (SELECT * FROM Table1 WHERE Column1='SomeValue')
    UPDATE Table1 SET (...) WHERE Column1='SomeValue'
ELSE
    INSERT INTO Table1 VALUES (...)"

如果SQL Server使用存储过程,最好的方法。

答案 1 :(得分:0)

正在寻找INSERT ... ON DUPLICATE UPDATE语法?

我需要PK(主键)来为您提供与...一起运行的确切查询。

假设这是MySQL给出的PHP标记

答案 2 :(得分:0)

请看一下我认为可以回答您问题的这篇文章:http://www.xaprb.com/blog/2005/09/25/insert-if-not-exists-queries-in-mysql/

它显示了编写SQL查询的几种可能方法,以克服缺少“IF NOT EXISTS”语法。请注意,如果您使用的是SQL Server,则可以编写IF NOT EXISTS。