AI智能
改变未来

oracle篇 DML


数据操作语言(DML)

插入语句
insert into 表名(字段列表) values(值列表)
oracle 是显性事务,需要确定提交commit才能真真正正地插入到数据库

插入语句配合子查询使用

--创立新表create table dept(did number,nname varchar(2))--批量插入insert into dept select department_id department_name from departments

更新语句
update 表名(字段列表) set 字段列表 = 值 where 条件

update dept set dname = \'生产部\',did = 88--当不加where条件时,会把所有数据更新,很危险。update dept set dname = \'生产部\',did = 88 where did = 10

更新语句配合子查询使用

--修改103号员工的工资,使其和100号员工的工资相同update employees set salary = (select salary from employees where employee_id = 100) where employee_id = 103

删除语句
delete from 表名 where 条件

更新语句配合子查询使用

--删除部门名称为IT的员工delete from employees where department_id = (select department_id from departments where department_name = \'IT\')

事务和锁

事务是一种机制,是一个序列,是一个不可分割的逻辑单元,要么成功,要么失败。

事务的特性(ACID)
1.原子性 要么成功,要么失败
2.一致性 必须从一个正确状态,到另一个正确状态
3.隔离性 通过锁实现
4.永久性 事务提交之后,不能回滚

事务控制语言(TCL)
commit – 提交
rollback – 回滚

事务的生命周期: 以任意的dml操作开始,以提交或者是回滚结束

  • 提交时机:
    1.commit
    2.执行DDL或者DCL,之前的事务自动提交
    3.正常退出会话(sqlplus)
  • 回滚时机:
    1.rollback
    2.异常退出会话(sqlplus)

oracle 中的锁
隔离性—锁的机制(有事务才有锁)
数据库锁的机制:主要是控制并发访问资源,显示用户动作

死锁的情况是很常见的
会话A对行A更新加锁,没结束事务
会话B对行B更新加锁,没结束事务

会话A想再对行B进行更新加锁,等待
会话B想再对行A进行更新加锁,等待
进入死锁
oracle 自动检测死锁,然后抛出异常,先结束一方的等待,解开死锁状态

视图:

视图:存放的就是一条查询语句(物化视图除外)
作用:简化查询(不会提高查询效率)

创建视图的语法
create [or replace] view 视图名
as
查询语句

删除视图
drop view 视图名

序列

用序列产生自增
create sequence 序列名

使用序列

select * from dept ;insert into dept values(seq_dept_did.nextval.\'xxx\')

带有参数的序列:

create sequence 序列名start with 10 --设置起始值,默认1increment by 10 --设置每次增长的值,默认1cache 10 --缓存数量,默认20

查看当前序列的值:seq_dept_did.currval
主键编号

索引

加快查询速度,降低DML速度。索引是给列加的
当使用没有索引的列进行条件筛选的时候,默认使用的全表扫描。
从创建的角度分析:
1.自动创建:在定义primary key 和unique约束后,系统会自动在相应的列上创建唯一性索引
2.手动创建:用户可以在其他列上创建非唯一索引,为了加快查询速度,会降低DML速度。

索引分类:
1.b-tree索引 :默认,适合列值的基数较高,冗余数据较少的
2.b-map(位图)索引:适合列值基数比较低,冗余数据很多的(比如性别)
没有必要建索引就不要建,会增加麻烦。

建立普通索引:
create index 索引名 on 表名(字段)
create index employees_salary_idx on employees(salary)

建立位图索引:
create bitmap index 索引名 on 表名(字段)

建立b-tree索引的时机:
1.列值基数比较高(重复率比较低)
2.不以空置做条件
3.列经常出现在条件子句中
4.表很大
5.经常做查询操作,而不是DML操作
6.满足条件的数据不超过总记录数的15%
7.模糊查询不走索引

b-map则相反

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » oracle篇 DML