覆盖MySQL表中的数据

时间:2010-07-12 12:58:58

标签: mysql

通过下面的查询,我试图覆盖名为“login”的MySQL表中的第10个字段,其值为NEW_VALUE。它不起作用。下面的代码是否是覆盖MySQL表中现有数据的正确方法?

提前致谢,

约翰

INSERT INTO login VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'NEW_VALUE', NULL, NULL, NULL)

4 个答案:

答案 0 :(得分:6)

如果有人还在寻找实际的覆盖而不仅仅是更新,那么就像添加一样。如果您想要 OVERWRITE ,(不更新,只是覆盖),您可以使用REPLACE代替INSERT

  

REPLACE的工作方式与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。请参见第13.2.5节“INSERT语法”

http://dev.mysql.com/doc/refman/5.5/en/replace.html

答案 1 :(得分:2)

没有你的代码不正确。您正在向表中添加新行而不更新现有值。要更新现有值,您需要使用更新语句:

更新特定记录

mysql_query("Update login SET nameOfYourColumn = '$cleanURL' WHERE primaryKey = idOfRowToUpdate")

更新整个表格

mysql_query("Update login SET nameOfYourColumn = '$cleanURL'")

答案 2 :(得分:2)

如果我理解了你的问题,那么答案就是“不”。这也不是特定于mysql的问题,它是一个通用的SQL问题。我强烈建议您阅读SQL教程,这是我知道的最好的教程:

http://philip.greenspun.com/sql/

要回答您的问题,您应该可以:

mysql_query("UPDATE login SET foo = '$cleanurl'");

其中“foo”是第十个字段的名称。

其他一些评论:

首先,不要依赖字段的位置,始终明确列出字段名称。例如,最好去

INSERT INTO login (id, name) VALUES (1, 'Fred') 

而不是

INSERT INTO login VALUES (1, 'Fred') 

第2点:您已将$ cleanurl的值直接嵌入到查询中。当然,你必须一次学习一件事,但要注意这是非常危险的。如果$ cleanurl包含类似“')的内容; DROP TABLE登录;”那么你可能遇到麻烦了。这称为SQL注入,是持续安全问题的根源。不需要太多细节,您应该学习如何使用预准备语句。

第3点:PHP附带了一个名为PDO的库,它支持预处理语句。它还提供了一个与数据库交互的通用API,因此如果您发现需要从Mysql移动到另一个DBMS,PDO将抽象出大多数差异。通过使用mysql_query函数,您可以锁定自己使用mysql。

您不必同时解决所有这些问题,但也不要忘记它们,一旦熟悉PHP和SQL,就会回到关于PDO和准备语句的问题。

答案 3 :(得分:1)

首先:INSERT向表中添加新记录,UPDATE更新(覆盖)一个或多个现有记录。

第二:UPDATE需要知道要更新的列的名称以及要更新的行

UPDATE <tableName>
   SET <columnName> = '$cleanurl'
 WHERE <some condition to identify which record should be updated>

第三:在阅读MySQL / SQL的几个基本教程

时,这可能是值得的