首页 \ 问答 \ MySQL UPDATE vs INSERT和DELETE(MySQL UPDATE vs INSERT and DELETE)

MySQL UPDATE vs INSERT和DELETE(MySQL UPDATE vs INSERT and DELETE)

我正在开发一个Web应用程序项目,并且有一个相当大的html表单,需要将其数据存储在表中。 表单和插入已经完成,但我的客户希望能够将保存的数据加载回HTML表单并能够更改它,再次,这没有问题,但我在进行更新时遇到了一个问题,如果它是一个编辑,是否适合保留插入查询然后删除旧行?

基本上,已经发生的事情是当提交表单时,所有数据都使用INSERT放入表中,如果数据是针对正在更新的现有字段,我还有一个名为edit的标志,其中包含主键ID。 我可以通过两种方式处理更新功能:

a)使用所有字段/数据集创建实际更新查询,并使用if / else来决定是运行更新还是插入查询。

b)每次插入,但在插入成功后向DELETE WHERE row = editID添加一行。

由于只有在INSERT成功时才会发生删除,因此我不会冒没有插入而删除数据的风险,从而丢失数据,但由于INSERT / DELETE是两个查询,它的效率会低于仅使用if /否则决定是否运行插入或更新?

有一个第二个表使用自动增量id作为外键,但每次提交表单时都必须更新此表,所以如果我删除表A中的行,我也将删除相关的行表b。 这似乎是糟糕的编程习惯,所以无论如何我倾向于选项a)但是使用单行选项非常诱人。 DELETE基本上如下。 这实际上是不好的编程习惯吗? 除了惯例之外,还有任何理由说明这是“从不这样做!” 代码类型?

    if ($insertFormResults) {
        $formId = mysql_insert_id();
        echo "Your form was saved successfully.";
        if(isset($_POST['edit'])){
            $query = "DELETE FROM registerForm WHERE id='$_POST[edit]'";
            $result = mysql_query($query);
        }
    }

I am working on a web app project and there is a rather large html form that needs to have its data stored in a table. The form and insert are already done but my client wants to be able to load the saved data back into the HTML form and be able to change it, again, this is no problem, but I came across a question when going to do the update, would it be appropriate to just keep the insert query and then delete the old row if it was an edit?

Basically, what already happens is when the form is submitted all of the data is put into a table using INSERT, I also have a flag called edit that contains the primary key ID if the data is for an existing field being updated. I can handle the update function two ways:

a) Create an actual update query with all the fields/data set and use an if/else to decide whether to run the update or insert query.

b) Do the insert every time but add a single line to DELETE WHERE row=editID after the insert is successful.

Since the Delete would only happen if the INSERT was successful I don't run the risk of deleting the data without inserting, thus losing the data, but since INSERT/DELETE is two queries, would it be less efficient than just using an if/else to decide whether to run an insert or update?

There is a second table that uses the auto-increment id as a foreign key, but this table has to be updated every time the form is submitted, so if I delete the row in table A, I will also be deleting the associated rows from table b. This seems like it would be bad programming practice, so I am leaning towards option a) anyway, but it is very tempting just to use the single line option. The DELETE would basically be as follows. Would this in fact be bad programming practice? Aside from conventions, are there any reasons why this is a "never do that!" type of code?

    if ($insertFormResults) {
        $formId = mysql_insert_id();
        echo "Your form was saved successfully.";
        if(isset($_POST['edit'])){
            $query = "DELETE FROM registerForm WHERE id='$_POST[edit]'";
            $result = mysql_query($query);
        }
    }

原文:https://stackoverflow.com/questions/4854863
更新时间:2020-05-09 07:48

相关问答

更多

insert、update、delete的使用顺序

改变优先级还可以确保特定类型的查询被处理得更快。 我们首先应该确定应用的类型,判断应用是以查询为主还是以更新为主的,是确保查询效率还是确保更新的效率,决定是查询优先还是更新优先。 下面我们提到的改变调度策略的方法主要是针对Myisam存储引擎的,对于Innodb存储引擎,语句的执行是由获得行锁的顺序决定的。 MySQL的默认的调度策略可用总结如下: 1.写入操作优先于读取操作。 2.对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理。 3.对某张数据表的多个读取操作可以同 ...

在MySql触发器中如何判断触发操作是insert update delete

Create trigger myTrigger on MF_MO_Z for Insert as declear @strTemp varchar(10)--字段长度等于MO_SO_NO长度 set @strTemp=select MO_SO_NO from inserted--从刚刚插入的数据中查询出MO_SO_NO字段 if @strTemp is not null--判断字段是否为空 begin update MF_MO set SO_NO=@strTemp--执行更新操作 end 以上是 ...

MySQL中有多个UPDATE或DELETE + INSERT?(Multiple UPDATE or DELETE + INSERT in MySQL?)

由于您只需更改900行值,因此第一个选项将快速执行。 因为您只需要运行两个查询。 但是如果你选择第二个选项,那么你将有近900个查询要运行,这肯定会变慢。 更好的想法是做同样的事情 TRUNCATE FROM table; INSERT INTO example VALUES (100, 'Peter'), (...), (999, 'Sam'); 因为truncate比delete更快。 Since you have only 900 row values to change then fir ...

UPDATE,DELETE然后INSERT或REPLACE INTO:最快/可扩展的MySQL(MyISAM)方法(UPDATE, DELETE then INSERT or REPLACE INTO: fastest/scalable MySQL(MyISAM) method)

您想使用InnoDB而不是MyISAM。 为什么? 因为当您执行批量插入和删除时,将整个事物包装在事务中可以大大提高性能。 无论你最终对数据做了什么,这种改变本身就是巨大的。 使用适当的事务隔离级别 ,您的用户可以在更改所有内容时继续使用该表,只需在提交后查看更改,而无需担心表锁。 关于实际数据更新,请避免删除 。 删除很慢 。 进行更新,并仅删除需要更新的内容。 避免使用REPLACE INTO魔法,因为它在插入之前删除。 You want to use InnoDB for this inst ...

Mysql如果存在update else insert(Mysql if exist update else insert)

INSERT ... ON DUPLICATE KEY UPDATE在MySQL中提供了等效的语法。 The INSERT ... ON DUPLICATE KEY UPDATE provides equivalent syntax in MySQL.

使用SPARQLWrapper进行INSERT / DELETE / UPDATE查询(INSERT/DELETE/UPDATE query using SPARQLWrapper)

SPARQL查询作为GET请求发送,但UPDATE(如INSERT,DELETE等)要求将查询作为POST请求发送。 只需在sparql.query()之前添加以下行 sparql.method = 'POST' 此外,更新的URL与查询不同。 此更新基于workbench而不是sesame url。 例如,如果查询网址是: http://localhost:8080/openrdf-sesame/repositories/test/ 要么 http://localhost:8080/open ...

是否可以执行INSERT + UPDATE + DELETE vs DELETE + INSERT?(Is it possible to do INSERT + UPDATE + DELETE vs DELETE + INSERT?)

它取决于表/索引结构,触发器等。 在某些情况下,您可以执行UPDATE语句,但实际上可以在后台执行DELETE / INSERT操作。 在某些情况下,使用“软删除”更快 - 只需将行标记为已删除,然后,在安静时间(周末),您可以安排物理删除行,对索引进行碎片整理等。您可以使用MERGE命令一次性执行INSERT / UPDATE / DELETE,但需要测量性能,将其与单个INSERT / DELETE / UPDATE语句进行比较。 在许多情况下,我更喜欢先删除,然后更新,最后插入。 它还取决于 ...

mysql更新,插入,删除加入(mysql update, insert, delete with joins)

您可以使用触发器执行此操作 DELIMITER $$ CREATE TRIGGER au_table1_each AFTER UPDATE ON table1 FOR EACH ROW BEGIN UPDATE table2 SET fieldY = new.fieldX WHERE ...; END $$ DELIMITER ; 触发器将使用table1中的一些新数据触发每次更新和更新table2。 在操作BEFORE和AFTER都有触发器,可以是UPDATE , INSERT或DEL ...

mysql:在一个查询中选择,插入,删除和更新(mysql: select, insert, delete and update in one query)

你不能在一个查询中完成所有操作 ,但是如果你使用事务性存储引擎(如InnoDB),你可以在一个事务中完成所有操作。 这可能是您想要的,但很难说只使用您在问题中提供的信息。 START TRANSACTION; INSERT...; DELETE... UPDATE...; COMMIT; You can't do it all in one query, but you can do it all in one transaction if you are using a transacti ...

相关文章

更多

最新问答

更多
  • 如何在laravel 5.3中获取参数?(How to get parameter in laravel 5.3?)
  • 使用带结构的地图作为键 - 值不保存[重复](Using map with structure as key - value doesn't save [duplicate])
  • GET请求,包含数据(GET request, with data)
  • 如何在javascript / NODE.js中从JSON获取第一个键?(How can I get the first key from JSON in javascript / NODE.js?)
  • 使用自己方法的链接进行索引分页(Index pagination with links to own method)
  • 仅使用密钥(GUID)从winform登录[关闭](Login from winform using only a key(GUID) [closed])
  • AngularJS - 重复在后台运行任务(AngularJS - run task in background repeatedly)
  • 使用Flask和JQuery,如何通过“性感”方式的“POST”方法删除记录?(With Flask and JQuery, how to delete a record by “POST” method in “sexy” way?)
  • 无法在DataGridView单元格BackColor中使用Color.FromArgb(Cannot use Color.FromArgb in DataGridView cell BackColor)
  • 将JavaScript变量值获取到Asp.net的Code Behind(get the javascript variable value to Code Behind Asp.net)
  • DMA工作时不会发生STM32F4 TIM6中断(STM32F4 TIM6 interruption doesn't happen while DMA working)
  • 关于带圆角的UIImageView(About UIImageView with round corners)
  • 如何运行我的代码[重复](How to run my Code [duplicate])
  • bash会对未设置的变量做什么(what will bash do with an unset variable)
  • ZF2 - 使用post redirect get并重定向到带有params的URL(ZF2 - Using post redirect get and redirecting to a URL with params)
  • Symfony EasyAdminBundle自定义视图(Symfony EasyAdminBundle custom view)
  • while循环中的子查询:什么是最快的?(Sub-queries in a while loop: what is fastest?)
  • Magento - 忘记密码链接生成使用不正确的商店视图(Magento - Forgotten password link generation is using incorrect store view)
  • 使用32位DLL找不到入口点。(Entry point not found with 32bits DLL. Working with 64 bits DLL)
  • 一个col中的变量;(Variables in one col; values in another->goal: add columns for variables)
  • 在另一个目录中执行文件[重复](Execute file in another directory [duplicate])
  • 我希望我的View能够识别另一个View的类(I want my View recognize the class of another View)
  • 没有for循环的验证消息访问(Validation message acess without for loop)
  • Mozilla中的Bootstrap 3模态没有显示(Bootstrap 3 modal in mozilla not showing)
  • 使用R中的日期时间变量处理数据帧(Manipulating dataframe with date time variable in R)
  • JQuery UI datepicker在异步调用,多个问题上的行为(Behaviour of JQuery UI datepicker on asynchronous call, multiple issues)
  • 如何在JavaScript对象中添加属性?(How to add a property in JavaScript object? [duplicate])
  • 有关.mdf数据库文件类型的问题(Questions regarding .mdf database filetype)
  • Qt Designer或关联的Qt工具是否具有xml格式的* .ui文件的全局查找和替换功能?(Does Qt Designer or associated Qt tool have a global find-and-replace functionality for the xml formatted *.ui files?)
  • AWS多区域灾难恢复和负载平衡 - 最佳方法?(AWS multi-zone distaster recovery and load balancing - best approach?)