小编典典

SQL更新,删除和同时插入

sql

我只是对某事感到好奇。让我说我有一个表,我将更新该值,然后将其删除,然后插入新的1。如果我以这种方式编写代码,这将非常容易:

  UPDATE PS_EMAIL_ADDRESSES SET PREF_EMAIL_FLAG='N' WHERE EMPLID IN ('K0G004');

  DELETE  FROM PS_EMAIL_ADDRESSES WHERE EMPLID='K0G004' AND E_ADDR_TYPE='BUSN';

  INSERT INTO PS_EMAIL_ADDRESSES VALUES('K0G004', 'BUSN', 'ABS@GNC.COM.BZ', 'Y');

但是,如果使用“ update”语句,它将更加容易。但我的问题是,有可能同时完成这3个步骤吗?


阅读 216

收藏
2021-04-14

共1个答案

小编典典

引用Oracle事务处理语句文档

事务是一个逻辑的 原子工作单元
,包含一个或多个SQL语句。事务对SQL语句进行分组,以使它们要么全部提交(这意味着它们已应用到数据库),要么全部回滚(这意味着它们从数据库中撤消了)。Oracle数据库为每个事务分配一个唯一的标识符,称为事务ID。

另外,引用Wikipedia交易帖子

在计算机科学中,ACID(原子性,一致性,隔离性,持久性)是一组属性,可确保可靠地处理数据库事务。

原子性要求每个事务都是 “全部或全部” :如果事务的一部分失败,则整个事务都会失败,并且数据库状态将保持不变。

就您而言 ,您可以将所有三个句子括在一个事务中:

COMMIT;         ''This statement ends any existing transaction in the session.
SET TRANSACTION NAME 'my_crazy_update'; ''This statement begins a transaction 
                                         ''and names it sal_update (optional).
 UPDATE PS_EMAIL_ADDRESSES 
    SET PREF_EMAIL_FLAG='N' 
  WHERE EMPLID IN ('K0G004');

 DELETE FROM PS_EMAIL_ADDRESSES 
  WHERE EMPLID='K0G004' AND E_ADDR_TYPE='BUSN';

 INSERT INTO PS_EMAIL_ADDRESSES 
 VALUES('K0G004', 'BUSN', 'ABS@GNC.COM.BZ', 'Y');

COMMIT;

这是满足您的要求 “一次完成所有句子” 的最佳方法。

2021-04-14