基本DML

来源:互联网 发布:sql 查看sequence 编辑:程序博客网 时间:2024/04/30 20:01

1.insert语句

    为列指定空行:insert into customers values(1,'tom','steve',null,null);

    从一个表向另外一个表复制行

    insert语句中,可以不使用列值,而是使用查询从一个表向另外一个表复制行;此时要求源表和目标表的列数和列的类型必须匹配。

    insert into customers(customer_id,first_name,last_name) select 10 ,first_name,last_name from customers where customer_id=1;

 

2.update语句

    在update语句中使用returning子句返回使用聚合函数计算的结果

     variable average_product_price number

     update products set price=price*0.75 returning avg(price) into :average_product_price;

3.merge语句

    merge语句可以用来将一个表中的行合并到另外一个表中,如将product_changes表中的变化合并到products表中

    merge into products p

   using product_changes pc on(

    p.product_id=pc.product_id

    )

    when matched then

    update

    set

    p.product_type_id=pc.product_type_id,

    p.name=pc.name,

    p.description=pc.description,

    p.price=pc.price

    when not matched then

   insert(

   p.product_id,p.product_type_id,p.name,p.description,p.price) values  

  (pc.product_id,pc.product_type_id,pc.name,pc.description,pc.price);

 

4.数据库事务

    数据库事务(transaction)就是一组sql语句,这组sql语句是一个逻辑工作单元,我们可以认为事务就是一组不可分割的sql语句,在执行时,应该作为一个整体永久地写该数据库的内容,或者作为一个整体取消对数据库的修改。事务通常包含多个insert,update,delete语句(即DML)。

    事务的提交与回滚

    要永久性地记录事务中sql语句的结果,需要执行commit语句从而提交(commit)事务。要取消sql语句的结果,需要执行rollback语句,从而回滚(rollback)事务。rollback语句可以将行从新设置为原始状态,在执行回滚操作之前对数据库进行的任何修改操作都会被取消,条件是此前没有断开与数据库的连接。

    事务的开始于结束

    事务是用来分割数据库活动的逻辑工作单元,事务既有起点,也有终点,当下列事件之一发生时,事务就开始了:

1.连接到数据库上,并执行第一条DML语句

2.前一个事务结束后,有输入了另外一条DML语句

当下列事件之一发生时,事务就结束了:

1.执行commit或rollback语句

2.执行一个DDL语句,例如create table 语句;在这种情况下,会自动执行commit语句

3.执行一个DCL语句,例如grant语句,在这种情况下,会自执行commit语句

4.断开与数据库的连接,在退出sql*plus时,通常会输入exit命令,此时会自动执行commit语句。如果sql*plus被意外终止了。那么就会自动执行rollback语句,这适用于任何会访问数据库的程序。

5.执行一条DML语句,该语句却失败了;在这种情况下,会为这个无效的DML语句执行rollback语句

    保存点

   在事务中的任何地方都可以设置一个保存点(savepoint),这样可以讲修改回滚到保存点处,如:

    update products set price=price*0.75;

    savepoint save1;

    update products set price=price*1.3;

   然后可以将事务回滚到刚刚设置的保存点处:

    rollback to savepoint save1;

    如果需要回滚整个事务:

    rollback;

    事务的ACID特性:

    原子性(atomicity);一致性(consistency);隔离性(isolation);持久性(durability)


原创粉丝点击