Php 如果SQL没有插入内容,如何使用SQL插入内容';不存在,如果存在,请将其删除?
我试图用PHP编写一个SQL查询,创建一个新行,除非该行已经存在,否则删除它 我知道我可以通过一个SELECT来完成这项工作,看看它是否在那里,然后执行一个简单的if语句来运行下一个查询。没问题。然而,我相信有一种方法可以通过一个查询来实现这一点,我想学习一下 我有一个名为“people”的表,它有四列:ID(唯一)、Name、Phone、Date。我的程序添加了一个姓名和电话号码,并将其填入我的表中。如果我添加一个已经在系统中的人,我希望它删除该人的信息。由于ID是递增分配的,并且Date只是我添加信息时的一个日期时间戳,因此我希望对照姓名和电话作为判断这是否是唯一条目的标准 这是我迄今为止的INSERT语句:Php 如果SQL没有插入内容,如何使用SQL插入内容';不存在,如果存在,请将其删除?,php,mysql,sql,insert,sql-insert,Php,Mysql,Sql,Insert,Sql Insert,我试图用PHP编写一个SQL查询,创建一个新行,除非该行已经存在,否则删除它 我知道我可以通过一个SELECT来完成这项工作,看看它是否在那里,然后执行一个简单的if语句来运行下一个查询。没问题。然而,我相信有一种方法可以通过一个查询来实现这一点,我想学习一下 我有一个名为“people”的表,它有四列:ID(唯一)、Name、Phone、Date。我的程序添加了一个姓名和电话号码,并将其填入我的表中。如果我添加一个已经在系统中的人,我希望它删除该人的信息。由于ID是递增分配的,并且Date只是
$sql = "INSERT INTO people (ID, name, phone, date)";
它起作用了。我还有一个语句,它使用SELECT确定行是否存在,如果不存在,则运行此脚本。这可能太复杂了
我已经研究过了,并且找到了关于这个的最少的信息。(所以可能有更好的方法吗?)我找到了一些资源,比如,它不能完全回答我的问题,因为我需要将它与我的“姓名”和“电话”列进行比较,而不是唯一的ID
谢谢你的帮助 仅当不存在基于任何列的任何数据时,才可以插入
INSERT INTO table (ID, name, phone, date)
SELECT '', 'anything', 'anything', 'anydate'
FROM dual
WHERE NOT EXISTS
( SELECT name, phone
FROM table
WHERE name = '35.86' AND phone = 'phonenumberhere'
);
这类似于运行另一个select语句,但对性能几乎没有好处。我怀疑您想替换该行,而不是删除它。这里有一种方法:
insert into t (id, name, phone, date)
values (id, name, phone, date)
on duplicate key set id = values(id), date = values(date);
这假设(姓名、电话)
具有唯一索引或声明为主键:
create unique index unq_t_name_phone on t(name, phone);
也许可以研究一下
REPLACE
,它的工作原理与INSERT
完全相同,只是如果表中的一个旧行与主键
或唯一
索引的新行具有相同的值,则在插入新行之前会删除旧行。请看@Brendan。没有办法在同一语句中执行硬delete
和insert
(除非可以使用某些触发器)。也就是说,为什么不使用软删除呢。也就是说,在数据中有一个标志指定行是否有效。您可以在同一语句中执行update
和delete
。