在插入新行之前删除行[重复]
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() 插入重复的新行而不检查它是不是存在