oracle数据库之初步(4)DML

来源:互联网 发布:网络维护外包费用 编辑:程序博客网 时间:2024/05/21 12:08

**

DML语言

**
sql语言的类型
数据语言实现数据的crud

DML语句 (Data Manipulation Language) 数据库操作语言
主要包含: insert update delete select

DDL语言 data definition Lanaguage
create table
create view index sequence synonym同义词
truncate table

DCL语言 data control language数据语言
commit rollback savetpointe

insert 语言
–1插入一个完整记录
insert into emp values (1, ‘aaa’, ‘clerk’, 7092, ‘17-12月-80’, 8000, NULL, 20);

–2插入部分记录
insert into emp(empno, ename, deptno ) values (2, ‘bb’, 20);

–3插入空值 (显示和隐式)
这里写图片描述
–4插入日期

insert into emp values (3, 'ccc', 'clerk', 7092, sysdate, 8000, NULL, 20); 

–5创建脚本 取地址符 &

        SQL> insert into emp(empno, ename, deptno ) values (&empno, &ename, 20);        输入 empno 的值:  4        输入 ename 的值:  'cccc4'        原值    1: insert into emp(empno, ename, deptno ) values (&empno, &ename, 20)        新值    1: insert into emp(empno, ename, deptno ) values (4, 'cccc4', 20)        已创建 1 行。如下所示:取地址符也可以用于select语句中

–6 SQL> select ename, job, &tt from emp;
输入 tt 的值: deptno
原值 1: select ename, job, &tt from emp
新值 1: select ename, job, deptno from emp

–7 批量插入数据

    ---把10号部门的员工 copy到另外一个表中    create table emp10        as                 select * from emp where 1=2将emp表中的所有内容完全复制到emp10表中 ====                insert into emp10            select * from emp where deptno = 10        SQL> select * from emp10;         EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------          7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10          7839 KING       PRESIDENT            17-11月-81           5000                    10          7934 MILLER     CLERK           7782 23-1月 -82           1300                    10

=================== =============== =============== =============== ===============
update
语法:(其中方括号是可选的意思)
UPDATE table
SET column = value [, column = value, …]
[WHERE condition];

            update table emp10            set deptno = 20            where empno = 7782

=================== ===============
删除数据
这里写图片描述
—删除指定数据
delete emp10
where empno=7782

–删除整个表中的数据
delete emp10 (但是表结构在…)

            drop emp10; 删除表

有关删除数据
DELETE [FROM] table
[WHERE condition];

            delete(删除表的数据)和truncate表(把表drop 然后再重新建表 )区别            1 delete逐条删除 truncate先摧毁表再重建                2 delete语言是DML语言 truncate是DDL                DML语言可以闪回   做错的并且提交了.可通过闪回,撤销操作                DDL语言不可以闪回  flashback               3 delete是逐条删除,会产生碎片,    truncate不会产生碎片                 行移动功能: 要开启闪回功能,必须要开启行移动功能            4 delete不会释放空间 truncate会            5 delete可以回滚 truncate不可以            6 oracle delete快 mysql truncate快

实验: 从文件中导入数据, 通过命名delete 和 truncate删除表数据 实验

        从文件中导入数据            SQL> set timing off;            SQL> set feedback off;            SQL> drop table testdelete purge;            SQL> @c:\Sql.sql;//这是载入一个已经写好的sql脚本的意思。            SQL>            SQL> set timing on;  //最后删除数据表的时候,把时间打开,记录时间            SQL> delete from testdelete;            已用时间:  00: 00: 00.09        从文件中导入数据        SQL>    set timing off;            @c:\Sql.sql;                set timing off;             select count(*) from testdelete;            set timing on;  //最后删除数据表的时候,把时间打开,记录时间            truncate table testdelete;            已用时间:  00: 00: 00.51

事务

1 基本概念
概念 一个或者多个DML语言组成
特点 要么都成功,要么都失败
特性 原子性 一致性 隔离性 持久性
事物的隔离性 多个客户端同时操作数据库的时, 要隔离他们的操作
否则:脏读 不可重复读 幻读
设置不同的搁置级别来解决

        -----oracle默认情况下,事务是打开...

这里写图片描述

这里写图片描述
create table t1(tid int, tname varchar2(20));

insert into t1(tid, tname) valudes(1, ‘aaaaa’);
commit;
rollback;

2 oracle中的事务 生命周期
1 事务起始标志 DML语言 (oracle默认事务打开的)
2 事务的结束标志
提交: 显示提交commit
隐式提交
1) 执行DDL语言
eg create table语言 还有I个隐式的功能
提交之前的没有提交的DML语言(insert update)
2) 正常退出
回滚: 显示 rollback
隐式 掉电/宕机/非正常退出==系统出错了
-=–保存点

insert into t3(tid, tname) values(1, 'aaaaa');  insert into t3(tid, tname) values(2, 'bbbbb');  savepoint a;    insert into t3(tid, tname) values(3, 'cccc');   rollback to savepoint a

===数据库的隔离级别
read-only

这里写图片描述

这里写图片描述

DDL

管理数据库的对象    表    视图 索引 序列 同义词 约束(..... )oracle基于用户的管理方案    借助于管理工具可以方便 看到数据库各个对象....======= 

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

1 创建一个表
2个条件(1 有权限 2 有表空间)
oracle给你提供了默认的resource,
create table t4(tid number, tname varchar2(20), tname2 char(6));

insert into t4 () values(1, ‘12’)
oracle的数据类型:
a) VARCHAR2(size) 可变和定长区别:varchar可变长,就是说在规定了最大存储后,还有实际存储的数据所占的存储空间,而char不可变长,也就是说当规定了字符的最大长度之后,无论存储的数据占据几个字符存储时都会占据已经给定的定长字符空间。
b) varchar2() 不能超过4096KB
c) oracle的数据类型 支持可见字符和不可字符的存储, 存图片使用的是不可见字符(二进制字符),可见字符是base64

—创建并且copy表
create + as

create table t5as     select *from emp;

—-查看别的用户下的表
select * from scott.emp;

– rowid 行地址 索引时候用

        SQL> select rowid, empno, ename from emp;        ROWID                   EMPNO ENAME        ------------------ ---------- ----------        AAAMfPAAEAAAAAgAAA       7369 SMITH        AAAMfPAAEAAAAAgAAB       7499 ALLEN        AAAMfPAAEAAAAAgAAC       7521 WARD        AAAMfPAAEAAAAAgAAD       7566 JONES        AAAMfPAAEAAAAAgAAE       7654 MARTIN        AAAMfPAAEAAAAAgAAF       7698 BLAKE        AAAMfPAAEAAAAAgAAG       7782 CLARK        AAAMfPAAEAAAAAgAAH       7788 SCOTT        AAAMfPAAEAAAAAgAAI       7839 KING        AAAMfPAAEAAAAAgAAJ       7844 TURNER        AAAMfPAAEAAAAAgAAK       7876 ADAMS        AAAMfPAAEAAAAAgAAL       7900 JAMES        AAAMfPAAEAAAAAgAAM       7902 FORD        AAAMfPAAEAAAAAgAAN       7934 MILLER        已选择14行。

表的增删改查
alter table t1 add myname varchar2(20);
alter table t1 modify myname varchar2(40);
alter table t1 drop column myname

--删除表
drop table test1;
–oracle的回收站
– 查看回收站 show recyclebin
– 清空回收站 purge recyclebin;
– 彻底删除一张表
drop table test1 purge; –直接删除一张表,不通过回收站
– 还原表(从回收站中返复原表)
闪回的内容
–关于回收站注意问题
–并不是所有的人都有回收站 管理员没有回收站

显示回收站的信息
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
—————- —————————— ———— ——————-
EMP20 BINyB56S7m9QCacFW9wbkk4Ig==0 TABLE 2014-08-10:22:48:43
SQL> select * from emp20; 不可以访问表
SQL> select * from BINyB56S7m9QCacFW9wbkk4Ig==0 不可以访问表
SQL> select * from “BINyB56S7m9QCacFW9wbkk4Ig==0”; 可以访问表
结论:通过回收站的名字,查看原来表的内容,需要双引号

SQL> select * from tab;            TNAME                          TABTYPE  CLUSTERID            ------------------------------ ------- ----------            DEPT                           TABLE            EMP                            TABLE            BONUS                          TABLE            SALGRADE                       TABLE            EMP10                          TABLE            BIN$fzmdJXyITtOZOnFngV2ONQ==$0 TABLE   =====>回收站            T2                             TABLE            TESTDELETE                     TABLE            T1                             TABLE            T3                             TABLE            T5                             TABLE            EMPINCOMEVIEW                  VIEW            HREMP                          SYNONYM            已选择13行。

练习题

第二天练习
1. 查询和Zlotkey相同部门的员工姓名和雇用日期

select last_name, hire_date
from employees
where department_id = (
select department_id
from employees
where last_name = ‘Zlotkey’
)

  1. 查询工资比公司平均工资高的员工的员工号,姓名和工资。

select employee_id, last_name, salary
from employees
where salary > (
select avg(salary)
from employees
)

  1. 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资

select employee_id, last_name, salary
from employees e
where salary > (
select avg(salary)
from employees
where department_id = e.department_id
)

  1. 查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名
    select employee_id, last_name
    from employees
    where department_id in (
    select department_id
    from employees
    where last_name like ‘%u%’
    )

  2. 查询在部门的location_id为1700的部门工作的员工的员工号,
    select employee_id
    from employees
    where department_id in (
    select department_id
    from departments
    where location_id = 1700
    )

  3. 查询管理者是King的员工姓名和工资
    select last_name, salary
    from employees
    where manager_id in (
    select employee_id
    from employees
    where last_name = ‘King’
    )
原创粉丝点击