编程开发 > JAVA > 文章内容

java基础知识总结(147)

2016-9-21编辑:ljnbset

DML: insert / update / delete

DDL: create / drop / alter /      truncate

DCL: grant / revoke

 

一 DML

1.insert

insert into dept_ning

values(55, 'market', 'beijing');

 

insert into dept_ning

(deptno,  dname, location)

values(56, 'research', 'beijing');

--数据没有全部提供,必须写列名

insert into emp_ning(empno, ename,

salary, deptno)

values(1234,'rose',5000,10,500);

 

--出错,没有足够的值

insert into emp_ning(empno, ename, salary)

values(1234,'rose');

 

--出错,值太多了

insert into emp_ning(empno, ename, salary)

values(1234,'rose',5000,500);

 

insert into emp_ning(empno, ename,

salary, hiredate)

values(1234, 'rose', 5000,

to_date('2012/01/01','yyyy/mm/dd'));

 

create table emp_bak

as

select * from emp_ning where deptno = 10;

 

delete from emp_bak;

 

insert into emp_bak (select * from emp_ning  where deptno = 20);

 

create table myObjects  as select * from all_objects where rownum < 1000;

 

delete myObjects;

 

insert into myObjects (select * from all_objects where rownum < 10000);

2.update

update 表名

set 列1 = 新值1,列2 = 新值2,...

where 条件;

 

update emp_ning set bonus = 1000, deptno = 20, job = 'Programmer' where empno = 1234;

 

3.delete

delete emp_ning where empno = 1234;

delete emp_ning where deptno = 10;

delete emp_ning;

select count(*) from emp_ning;

rollback;

select count(*) from emp_ning;

 

create table emp_bak1_ning

as

select empno, ename,salary

from emp_ning

where deptno = 30;

--适合bak1中重复记录非常多的场合.

              复制非重复记录

emp_bak1_ning--------------> bak2

删掉表bak1, 把bak2改名为bak1.

--适合bak1中重复记录非常少的场合.

--直接在bak1中删除.

--查询重复记录中地址最大的那条

select empno, ename, salary,

       max(rowid)

from emp_bak1_ning

group by empno, ename, salary;

--删除除了地址最大的重复记录之外所有的记录.

delete emp_bak1_ning

where rowid not in (

select max(rowid)

from emp_bak1_ning

group by empno, ename, salary);

rownum, rowid是Oracle独有的.

事务 Transaction

commit / rollback

-----事务开始--------------

DML:insert / delete / update

commit(提交,确认),

或者 rollback(回滚,撤销)

-----事务终止--------------

A                B

insert : 1234    select (查不到)

commit          

                 可以查到 1234

update          

                 update(挂起)

commit(释放锁)   修改成功

update(挂起)

                 rollback;

修改成功.

---开始事务-----

update account

set money = money - 500

where id = 'A';

update account

set money = money + 500

where id = 'B';

if (都成功)

         commit;

else

             rollback;

-----事务终止-----

正常退出会话: commit

异常退出会话: rollback

DDL操作: commit

create table temp_ning (id number);

insert into temp_ning values(1);

insert into temp_ning values(2);

--设置保存点,名字是a(自定义)

savepoint a;

insert into temp_ning values(3);

insert into temp_ning values(4);

--回滚到指定点

rollback to a;

select * from temp_ning;--2条记录

 

insert into temp_ning values(100);

savepoint b;

insert into temp_ning values(5);

savepoint c;

insert into temp_ning values(6);

--b点之后的保存点被取消

rollback to b;

insert / update / delete

二.DDL操作:

create / drop / alter / truncate

create table 表名(

列1 列1数据类型,

列2 列2数据类型,

....

);

drop table 表名;

create function f_name()....

drop function f_name;

alter: 修改对象结构

create table temp_ning(id number);

 

--增加列,只能加在最后.

alter table temp_ning  add (name char(20));

alter table temp_ning add (age number(3));

--改列名

 alter table temp_ning

 rename column name to stuname;

--改列的类型char(20)->char(10)

--放大可以

--缩小的话, 如果数据有超过10个字符的,不能修改.

id    stuname        age

1     tom             18

2     zhangsan        20

 

--删除列age

alter table temp_ning

drop column age;

alter table 表名

--add (name char(20));

--rename column 旧列名 to 新列名;

--modify (age number(3));

--drop column 列名;

--截取表:把表数据全部删除.

--立即生效,不能rollback

truncate table temp_ning;

delete temp_ning + commit

--三思而后行

drop table ....;

truncate table ...;

三.DCL语言

grant / revoke

--授权

grant select on emp_ning to scott;

--撤销权限

revoke select on emp_ning from scott;

sys/安装时设置

system/安装时设置

scott/tiger(测试用户)

...

openlab/open123

ninglj/*****

四.脚本文件

文档

源代码

数据库脚本文件

1.创建脚本文件script_ning.sql

$vi script_ning.sql

-----------------------

drop table temp_ning;

create table temp_ning(id number);

insert into temp_ning values(1);

commit;

-----------------------

esc键-> :wq

2.sqlplus中批处理执行脚本文件

SQL>@ /user/openlab/script_ning.sql

 

数据库在192.168.0.26

数据库的口令:openlab/open123

Oracle的端口号: 1521

Oracle的名字(sid):tarena

sqlplus安装在本地机器上

 

C:>sqlplus openlab/open123@192.168.0.26:1521/tarena

SQL>

 

连接数据库的工具:

--首选,命令行工具

sqlplus

--图形工具

pl/sql developer(非官方,免费)

toad(非官方,收费)

sql developer(官方,免费,11g以上)

补充练习: procedure 过程

PL/SQL:  Procedure Language / SQL

函数(function)

过程(procedure)

包(package)

触发器(trigger)

--输入班号,输出最高分的学生名字和总成绩

create or replace procedure cal_ning(

 p_class_id in number, p_student_name out char,

 p_total_score out number

)

is

begin

  select student_name, total_score

  into  p_student_name, p_total_score

  from (

    select stu.student_name,

           sum(per.test_score) total_score

    from t_student_ning stu join t_performance_ning per

    on stu.student_id = per.student_id

    where stu.class_id = p_class_id

    group by stu.student_name

    order by total_score desc)

  where rownum < 2;

end;

/

--打开输出,默认值是off

SQL>set serveroutput on

--匿名块,用来测试过程或函数

SQL>declare

  p_student_name char(20);

  p_total_score number;

begin

  cal_ning(&no, p_student_name,       p_total_score);

  --向控制台输出变量值,System.out.print

  dbms_output.put_line(p_student_name);

  dbms_output.put_line(p_total_score);

end;

/

--可以用&abc符号表示在运行时输入变量值

select * from emp_ning

where deptno = &abc;

--改进版,输入共多少个班,输出每个班的最高成绩的学生姓名和总分

--假设是班号是1-p_class_num

create or replace procedure cal_ning1(

   p_class_num in number)

is

  p_student_name char(20);

  p_total_score number;

begin

  for i in 1..p_class_num loop

    select student_name, total_score

    into  p_student_name, p_total_score

    from (

      select stu.student_name,

           sum(per.test_score) total_score

      from t_student_ning stu join t_performance_ning per

      on stu.student_id = per.student_id

      where stu.class_id = i

      group by stu.student_name

      order by total_score desc)

    where rownum < 2;

    dbms_output.put_line

        (p_student_name || ', ' || p_total_score);

  end loop;

end;

/

SQL>exec cal_ning1(2); --2个班

java基础知识总结(146)

热点推荐

登录注册
触屏版电脑版网站地图