在插入新行之前删除行[重复]

Posted

技术标签:

【中文标题】在插入新行之前删除行[重复]【英文标题】:Delete row before insert a new one [duplicate] 【发布时间】:2016-04-29 11:26:55 【问题描述】:

如何在同一个表中插入新行之前删除一行。我用触发器尝试过,但我读到这是不可能的,因为它可能导致死锁。

我还想在删除之前将应该删除的行保存到另一个表(例如表 B),然后插入一个新行(到表 A)。

还有其他方法吗?

PS:他们将拥有相同的密钥

【问题讨论】:

那么简单的答案是编写一个查询来读取该行,然后将其写入另一个表,然后删除该行,然后插入一个包含新数据的行 或者,如果他们有相同的密钥,你为什么要删除/插入,而不是更新? 如果他们有相同的键,为什么不简单地更新行? 您可以通过使用 sp 并适当地应用查询来做到这一点 【参考方案1】:

你可以使用UPDATE...

UPDATE tbl
SET col1 = newCol1,
    col2 = newCol2
WHERE etc = etc

如果你想将更新的行插入另一个表,你可以使用TRIGGER AFTER UPDATE

CREATE TRIGGER TriggerName ON Tbl
AFTER UPDATE
AS
INSERT INTO Log (Col1, Col2) 
SELECT Col1, Col2
FROM deleted

【讨论】:

如果行不存在怎么办?有了这个解决方案,我只能在它已经在我的表中时才能做到这一点 @AhmetKazaman 在这种情况下你可以使用if exists (select ....) begin /*query to update*/ end else begin /*query to insert*/ end 你的意思是这样的? "DELIMITER // IF EXISTS (SELECT ... WHERE ID=...) BEGIN UPDATE ...; END// ELSE BEGIN INSERT ... END // DELIMITER ;"因为那对我不起作用:“您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,以了解在 'BEGIN" 附近使用的正确语法。我做错了什么?这会影响我的查询的性能吗? 它甚至可以在 mysql 中工作吗?

以上是关于在插入新行之前删除行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

DataTable update() 插入重复的新行而不检查它是不是存在

使用无法定位的 JQuery 在 HTML 表中动态插入行 [重复]

mac 上 sublime text2 快捷键

Mysqli查询功能插入重复行

事务与批处理查询以避免重复的 MySQL 插入

在 tableview 中插入新行会重复最后一行