数据操纵语言(Data Manipulation Language,DML)用于查询与修改数据记录,控制事务。
事务:是由完成若干项工作的DML语句组成的。
1.1 增 INSERT
(1)向表中的所有列增加数据。
insert into 表名
values (列1值,列2值,……)
例1:向emp1表中增加一行数据,emp1的列有employees_id,last_name,hire_date,salary四列。
insert into emp1
values (1001,'AA',sysdate,10000)
例2:在例1的基础上再增加一条数据,其中salary的值为空。
insert into emp1
values (1003,'CC',sysdate,null)
(2)向表中的特定几列增加数据。
insert into 表名(列名1,列名2,……)
values (列1值,列2值,……)
例1:
insert into emp1(employee_id,last_name,hire_date)
values (1001,'AA',sysdate)
(3)依托于已有的表,向表中增加数据。
例1:
insert into emp1(employee_id,last_name,hire_date,salary)
select employee_id,last_name,hire_date,salary
from employees
where department_id = 80
1.2 删 DELETE
delete from 表名
where 过滤条件
例1:从emp1表中删除部门名称中含public字符的部门id。
delete from emp1
where department_id = (select department_id
from departments
where department_name like '%public%')
1.3 改 UPDATE…SET…WHERE
一般修改数据仅涉及某几条,很少有全表修改的情况,所以一定要注意添加过滤条件。修改完之后若不执行commit,则可以回滚;若执行了commit,则数据提交不可以回滚。
update 表名
set 列名 = 新值
where 过滤条件
例1:修改AA的薪水,使其薪水从10000变为12000.
update emp1
set salary = 12000
where last_name = 'AA'
例2:调整与emoployee_id为200的员工job_id相同的员工的department_id为employee_id为100的员工的department_id。
update emp1
set department_id = (select department_id
from emp1
where employee_id = 100)
where job_id = (select job_id
from emp1
where employee_id = 200)
例3:更改108号员工的信息,使其工资变为所在部门中的最高工资,job变为公司中平均工资最低的job_id。
update emp1
set salary = (
select max(salary)
from emp1
where department_id = (select department_id
from emp1
where employee_id = 108)
),
job_id = (
select job_id
from emp1
group by job_id
having avg(salary)= (select min(avg(salary))
from emp1
group by job_id)
)
where employee_id = 108
1.4 查 SELECT
例:
select * from 某表
例:
select 某列,某列,某列 from 某表
1.5 数据库事务
一组逻辑操作单元,使数据从一种状态变换到另一种状态。
数据库事务由以下的部分组成:
(1)一个或多个DML语句;
(2)一个DDL语句;
(3)一个DCL语句。
数据库事务以第一个DML语句的执行作为开始,以下面的其中之一作为结束:
commit或rollback语句;DDL语句(自动提交);用户会话正常结束;系统异常终止。
其他用户不能看到用户所做的改变,知道当前用户结束事务。
DML语句所涉及到的行被锁定,其他用户不能操作。
常用savepoint 来设置存储点,与回滚一齐使用。