OOAD思想&&ORACLE

OOAD思想

 

1继承关系:指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系

 

2关联关系

  • 关联关系是对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联,关系是使用实例变量实现的,比如公司和职员
  • 聚合关系是关联关系的一种,他体现的是整体与部分、拥有的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分,它也是通过实例变量实现的,在java语法上是看不出来的,只能考察类之间的逻辑关系
  • 组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分
  • 依赖关系是类与类之间的连接,依赖总是单项的(人和车,人和房子),依赖关系在java中体现在局部变量,方法的参数,以及静态方法的使用。在A类中的方法中使用B类的引用

 

 

 

代码表示

 class A{

   B b;//聚合

C c=new C();//组合

Public A(B b){this.b=b;}

Public void ect(D d){ d.m(); //依赖}

}

class D{void m(){}}

 

 

 

在UML图形表示[U1] 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ORACLE

 

第一天:====================

  1. 关系数据库的三要素: 1实体----》表(存放数据)

                          2属性---》列

                          3关系---》外键

  1. sqlplus常用命令

   help index
可以看到所有的命令,
不会的命令用:
help <命令>;例如:help list

exit       退出SQL*PLUS

desc 表名    显示表的结构

show user    显示当前连接用户

show error    显示错误

show all     显示所有68个系统变量值

edit       打开默认编辑器,Windows系统中默认是notepad.exe,把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑

edit 文件名   把当前目录中指定的.sql文件调入编辑器进行编辑

clear screen   清空当前屏幕显示

 

SQLPLUS到ORACLE的运行图(见笔记本)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  select  columnname(列名)

  1)  select *

  2)  select id,last_name,dept_id

  3)  select id,last_name "Name",salary*12 anual

  4)  select last_name||' '||first_name

        //如果comm为null时,nvl(comm,0)等于0;否则等于comm;

  5)  select  last_name,salary*(1+nvl(comm,0)/100)

  6)  select distinct last_name,first_name 

 

  from  tablename 

  预定义:  作用的时间长   所有的叫这个列名的列都生效

  sql:   当次生效    当前sql的当前表      

 

  order by:

  select id,last_name,dept_id

  from s_emp

  1)order by dept_id;

    order by title;

  2)order by last_name,dept_id;  

    先按名字升序排,名字相同再按dept_id升序排  ,中间用“ ,  ”隔开;

  3)order by last_name desc;

    order by dept_id,last_name desc;

    dept_id升序,last_name降序

  4)null

    在oracle里是最大,也就是升序的时候放在最后面;

  5)order by 2;  <=======> order by last_name

    select * 里面的第二列

  6)select id,last_name name

    from s_emp

    order by NAME;    

==============================================  select       from          where          order by

 

  select id,last_name,dept_id,start_date

  from s_emp

1)where  dept_id=41;

    where last_name='Smith';   ---->字符串区分大小写,SQL命令不区分大小写;

    where start_date='08-mar-90';       

  2)where salary>1000;

  3)where dept_id between 41 and 45;

    包括边界值

    where dept_id between 45 and 41;  //小的在前,如果反了,查不出记录  

    //dept_id的值只能是41,43,45三个数中的一个,且三个数都会被计算一次。

  4)where dept_id in(41,43,45);

  5)where commission_pct=null;    查不出记录

    where commission_pct is null;    

  6)where last_name like 'S%';

      unix:   *    ?

      oracle: %    _ (下划线)

    查出last_name是以'S_'

    where last_name like 'S_%';  ----> error

    where last_name like 'S\_%' escape '\';        //escape '\'表示“\”为换码字符;

  7) 非

    !=  <>

    not between  and

    not in

    not like

    is not null

  8)and > or

    where dept_id=41 and id>5;   

    where dept_id=41 or id>5; 

    ----->where salary>1000 

                and dept_id=41

                or dept_id=42;

    ----->where salary>1000 

                and (dept_id=41

                or dept_id=42 ); 

    ----->where dept_id=41

             or dept_id=42

             and salary>1000;

select s_customer.name,s_emp.last_name

from

s_customer,s_emp

where s_emp.id(+)=s_customer.sales_rep_id;                

//(+)让员工表补个空值。为的是让所有的客户都有对应的员工

//,因为有些客户没有对应的销售代表,所以设为空

 

        

 

 

 

 

=================================================================================================

 

第二天:

Single Row Function:

 varchar2:

   1)  nvl('hello','world')-----> 'hello'

       nvl(null,'world')--------> 'world'

   2)  select id,last_name,dept_id

       from s_emp

       where lower(last_name)='smith';

   3)  select id,concat(last_name,first_name),dept_id

       from s_emp;

       concat(last_name,first_name)--->result1;

       concat(result1,title);

       --> concat(concat(last_name,first_name),title);

       System.out.println(stu.toString());

           select substr('String',-4,3)

       from dual;

       dual: dummy table ,为了维护select的完整性 

            select id,last_name,dept_id

       from s_emp

       where last_name like 'S%';

       where substr(last_name,1,1)='S';

number: round  trunc

  date:日期类型

    1) select sysdate from dual; 

标准的日期格式:

  年:  yy        08

       yyyy      2008

       rr        08

       rrrr      2008

       year      two thousand and eight

  月:  mm        06

       mon       JUN

       month     june

  日:  dd        19

       ddth      19th

       ddsp      ninteen

       ddspth    ninteenth

 星期: d         4

       dy        thu

       day       thursday

 小时: hh24    22

       hh      10

       am  pm       

 分钟: mi         秒: ss   

  select id,last_name,dept_id,

    to_char(start_date,'yyyy-month-dd,hh24:mi:ss') "sdate"

 from s_emp

 where dept_id=41;

 

 update s_emp

 set start_date=to_date('19-jun-08,11:24:56','dd-mon-yy,hh24:mi:ss')

 where id=100;              

 

 update s_emp

 set start_date=to_date('19-jun-90','dd-mon-yy')

 where last_name='S_abc'; 

 

 select id,last_name,to_char(salary,'$99,999.00')

 from s_emp;     

 

 select id,last_name,

   to_char(start_date,'fmdd-mm-yyyy,fmhh:mi:ss') "sdate"

 from s_emp;      

 

 fm:在不引起歧义的情况下去掉前置的零和空格

    类似于开关变量,第一次写打开功能,再写关闭

 

 Join:数据来源于多张表,叫多表联合查询,多个表之间要做连接

   1.等值连接(内连接)  条件:  fk-----pk

     select s_emp.last_name,s_emp.dept_id,

            s_dept.id,s_dept.name

     from s_emp,s_dept

     where s_emp.dept_id=s_dept.id; 

     

 

     oracle:select e.last_name,e.dept_id,d.id,d.name

            from s_emp e,s_dept d

            where e.dept_id=d.id;   

           

    标准sql:select e.last_name,e.dept_id,d.id,d.name

            from s_emp e inner join s_dept d  

            on e.dept_id=d.id

            where e.last_name='Smith';  

           

            select e.last_name,e.dept_id,d.id,d.name

            from s_emp e join s_dept d  

            on e.dept_id=d.id

            where e.last_name='Smith';       

    

     打印出员工的名字,所在部门的名字,以及所在地区的名字

     select e.last_name,d.name,r.name

     from s_emp e,s_dept d,s_region r

     where e.dept_id=d.id

       and d.region_id=r.id; 

      

     select e.last_name,d.name,r.name

     from s_emp e join s_dept d

       on e.dept_id=d.id

       join s_region r

       on d.region_id=r.id;

 

  2.外连接(左外,右外,全外)

 

    打印所有的客户名字,以及所对应的销售代表的名字 

   

    1)左外:如果左边对应的右边的值为空时,右边补null

    oracle:select  c.name,c.sales_rep_id,e.id,e.last_name

                                from s_customer c,s_emp e

                                where c.sales_rep_id=e.id(+);  

   标准sql:select c.name,c.sales_rep_id,e.id,e.last_name

           from s_customer c left outer join s_emp e

           on c.sales_rep_id=e.id;

   

    2)右外  :如果右边对应的左边的值为空时,左边补null

    select  c.name,c.sales_rep_id,e.id,e.last_name

    from s_customer c,s_emp e

    where  e.id(+)=c.sales_rep_id;    

   

 select c.name,c.sales_rep_id,e.id,e.last_name

    from s_emp e right join s_customer c

    on c.sales_rep_id=e.id;

   

    3)全外 :都不补空值(null)

     select c.name,c.sales_rep_id,e.id,e.last_name

     from s_customer c full outer join s_emp e

     on c.sales_rep_id=e.id;  

    

 3.自连接: 本表的fk指向本表的pk

   可以给表起不同的别名,再做连接。

   打印出员工的姓名和他的经理的名字

   select e.last_name,m.last_name

   from s_emp e,s_emp m

   where e.manager_id=m.id;

 

   打印出所有员工的姓名和他的经理的名字

select e.last_name,m.last_name

from s_emp e,s_emp m

where e.manager_id=m.id(+); 

  

 4.非等值连接(t1和t2没有pk和fk,还想连接t1,t2)

     table1: id    value

              1      A

              2      B

              3      C

              4      D

     table2: id    value

              1      A

              2      B

              3      C

              4      D

     请写出一句sql语句,打印输出

     AB AC AD BC BD CD 

    

     select  t1.value,t2.value

     from  table1 t1,table2 t2

     where t1.id<t2.id;

    

     请写出一段sql语句,打印输出

     AB AC AD BA BC BD CA CB CD DA DB DC

     select  t1.value,t2.value

     from  table1 t1,table2 t2

     where t1.id!=t2.id;

    

   5.笛卡儿连接(不给连接条件)

    

     请写出一段sql语句,打印输出

     AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD

    

     select t1.value,t2.value

     from table1 t1,table2 t2;  

    

 SubQuery:

1.请打印出和Smith在同一部门的员工的姓名,

start_date,dept_id

     1) select dept_id

        from s_emp

        where last_name='Smith'; -----> result1

        select last_name,dept_id,start_date

        from s_emp

        where dept_id=result1;   

       

     2) select last_name,dept_id,start_date

        from s_emp

        where dept_id=(

               select dept_id

               from s_emp

               where last_name='Smith');  

                                                              

   2.主查询和子查询靠值联系

     1) 值的类型要相同

        select last_name,dept_id,start_date

        from s_emp

        where dept_id=(

               select last_name

               from s_emp

               where last_name='Smith');  

 

     select last_name,dept_id,start_date

        from s_emp

        where dept_id=(

               select salary

               from s_emp

               where last_name='Smith');

 

 select last_name,dept_id,start_date

        from s_emp

        where dept_id=(

               select id

               from s_region

               where id=1);    

 2)值的个数要一致

        select last_name,dept_id,start_date

        from s_emp

        where dept_id=(

                           select dept_id,last_name

                                       from s_emp

                           where last_name='Smith');

 

     select last_name,dept_id,start_date

        from s_emp

        where dept_id=(

               select dept_id

               from s_emp

               where last_name='Smith'

            or id=3);  ---->error

        --->改进

        select last_name,dept_id,start_date

        from s_emp

        where dept_id in (select dept_id

                                                   from s_emp

                                                   where last_name='Smith'

                     or id=3);

                    

     sql----->dbsv

     1)编译

        a.权限检测

        b.语法检测

        c.sql翻译成内部指令

     2)运行内部指令

    

  3)哪些地方可以用子查询

   需要值的地方就可以用子查询

   1)select         不可以

     from           可以(需要表的时候在这里写子查询)

     where          可以(需要值的时候在这里写子查询)

     order by        可以(按select里列的下标值排序 ,如:order by 2)

     group by                     不可以

     having                         可以(跟where用法一样)

     select *

     from (select e.last_name,e.dept_id,d.id,d.name

           from s_emp e,s_dept d

           where e.dept_id=d.id) e;

          

          

 jobs:

  1.SQL-1.pdf  (4)

 

      2.请打印出公司入职最早的五个员工的姓名(last_name),dept_id,start_date

select *

from (

            select last_name,dept_id,start_date

            from s_emp

            order by start_date

) e  

where rownum  between 1 and 5;

       

 

 

      伪列:rownum(代表显示在界面上的行号,数据库本身不提供,查询时会默认的提供,只有在select中显示的写rownum,才会显示行号;)

      rowid(数据库里本身就有的,代表在数据库里存的物理地址)

      select * from s_dept;

      desc s_dept;

 

      分页:子查询和rownum

        打印表里面第五到第十条记录:

select last_name dept_id,start_date

from(

select e.last_name,e.dept_id,e.start_date,rownum rownumid

            from(

                        select last_name,dept_id,start_date

                        from s_emp

                        order by start_date

            ) e

            where rownum between 1 and 10

) a

where a.rownumid between 6 and 10;

 

 

 

 

 

第三天:===================================

 Group function(组函数):

  1) select avg(salary),max(salary)

     from s_emp;

     select count(*) from s_emp;

     select count(id) from s_emp;

     select count(commission_pct) from s_emp;

     统计commission_pct列不为空的值的个数;

     number: max  min  sum  avg  count

     date:   max  min  count

     char:   max  min  count    

  2) select dept_id,avg(salary),count(*)

    from s_emp

    group by dept_id;

    select   from    where   group by   order by

    select dept_id,avg(salary)

    from s_emp

    where dept_id in (41,50)

    group by dept_id;

   

 3) 当select里面出现组函数和单独的列并存时,要求必须

    写group by子句,并且单独的列必须出现在group by里面

    select dept_id,avg(salary)

    from s_emp

    group by dept_id;      

    select salary,avg(salary)

    from s_emp  

    group by salary;

   

    如果group by里出现多列,那么按照列的联合分组,

    只有多列的值完全相同才会分到一组

    select last_name,first_name,avg(salary)

    from s_emp

    group by last_name,first_name;

请打印出工资低于公司平均工资的人的姓名,

dept_id,start_date

    select last_name,dept_id,start_date

    from s_emp

    where salary<(select avg(salary) from s_emp ); 

4) 只要写group by,那么select里单独列必须出现在

    group by里

    select dept_id,last_name,start_date

    from s_emp

    group by dept_id,last_name,start_date;

5)where执行时数据处于独立个体状态,里面不能对组函数

   进行判断,只能对单独记录判断

   having一定出现group by后面,此时数据处于组的状态

   所以having只能对组函数或者组的共性进行条件判断,

 

   请打印出部门平均工资大于1500的这些部门的id以及平均工资

   select  dept_id,avg(salary)

   from s_emp

   where avg(salary)>1500

   group by dept_id;     ------>error  

  ====================================

   select  dept_id,avg(salary)

   from s_emp

   group by dept_id       

   having avg(salary)>1500;   

  

   select  dept_id,avg(salary)

   from s_emp

   group by dept_id  -------> group      

   having salary>1000;   ----->整个组  error   

  

   select  dept_id,avg(salary)

   from s_emp 

   group by dept_id

   having dept_id>40;

  

   select  dept_id,avg(salary)

   from s_emp   

   where dept_id>40

   group by dept_id ; 

  

 6) order by 列名,2,别名;

    原来对order by里的列没有任何限制,只要表里有就可以

    select  from   where   group by  having  order by

    在order by之前如果出现了group by,那么order by里面

    就只能按照组函数或者是组的共性排序

     eg: select dept_id,avg(salary)

        from s_emp

        where dept_id > 40

        group by dept_id

        having avg(salary)>1000

        order by last_name; ------>error

        order by max(last_name); ---->correct

        order by dept_id;    -------->dept_id    

  作业: 请打印出工资低于本部门平均工资的员工的姓名,

         dept_id,start_date 

       select dept_id,avg(salary) asalary

        from s_emp

        group by dept_id;   ---->a1

      select e.last_name,e.dept_id,e.start_date

        from s_emp e,a1

        where e.dept_id=a1.dept_id

          and e.salary<a1.asalay;

    --->select e.last_name,e.dept_id,e.start_date

        from s_emp e,(

               select dept_id,avg(salary) asalary

                                       from s_emp

                                       group by dept_id

                  ) a1

        where e.dept_id=a1.dept_id

          and e.salary<a1.asalary;       //数据库表和表连接的时候,比较的是同一元组;

  

 

      

 Define  Variable

 1. select last_name,dept_id,start_date

    from s_emp

    where dept_id=&did; 

    where last_name=&name;

    where last_name='&name';     

 2.预定义 

   1) define varname=value

      define did=41

       简单,定义出来的变量都是char类型  

      不能写进sql文件

      查询一个数是否已经预定义用define varname

      取消用undefine varname

   2) accept varname type prompt '   ' hide    //单独一句话,为的是永久性的给varname一个值

  accept did number prompt 'please input dept_id value:' hide

      accept did prompt 'please input dept_id value:'----> char

     

     比define复杂, 可以指定变量的类型,可以写进  .sql 文件,

     在bash下:1)进入csh;

                  2)setenv EDITOR VI ;

                  3)sqlplus 进入SQL的用户名和密码;

                                           4)写一个要保存进文件的命令;

                  5)save sqlfile;

     6)ed   进入vi编辑命令,在最上面加上(accept varname type prompt '   ' hide)语句;

      7)ZZ(保存并退出vi);                     

      8)start sqlfile.sql就可以运行刚才保存的命令了。

                  

下面是用于实验预定义的

/*select e.last_name

from s_emp e

where e.dept_id='&deptid';

accept deptid number prompt 'please input dept_id value:' hide

*/      

3) define varname   查看状态

      undefine varname  取消预定义      

3.哪些地方可以用变量定义:

   select            

   from

   where              全部可以

   group by

   having

   order by   

  

   select &col1,&col2,&col3

   from &tab1

   where &con1; 

 

    =======================================================================================

 

 第四天:

Create table:

 1.db structure

   1)table---> store data                2)view----> select                3)sequence             4)index

 2.create table luxw1

   ( id number(7),

     name varchar2(15),

     registdate date

   );       

   create table luxw2

   (id number(7),

    film blob

   );

    

   1)列一级约束

   create table yesq5

   ( id number(7) constraint yesq5_id_pk primary key,

     name varchar2(15) constraint yesq5_name_nn not null,

     age number(3) constraint yesq5_age_ck_age check(age>18 and age<60),

     sex varchar2(2) default 'M' constraint yesq5_sex_ck_sex check( sex in('F','M') ),

     birthday date default sysdate,

     phone varchar2(15) constraint yesq5_phone_uk unique,

     personid char(18)

       constraint yesq5_personid_nn not null

       constraint yesq5_personid_uk unique,

     class_id number(7) constraint yesq5_class_id_fk references s_dept(id) on delete cascade

   ); 

   2)表一级约束

   create table yesq5

   ( id number(7),   

     name varchar2(15) constraint yesq5_name_nn not null,

     age number(3),

     sex varchar2(2) default 'M',

     birthday date default sysdate,

     phone varchar2(15),

     personid char(18) constraint yesq5_personid_nn not null,

     class_id number(7),

     constraint yesq5_id_pk primary key(id),

     constraint yesq5_age_ck check( age>18 and age<60),

     constraint yesq5_sex_ck check( sex in('M','F') ),

     constraint yesq5_phone_uk unique(phone),

     constraint yesq5_personid_uk unique(personid), 

     constraint yesq5_class_id_pk foreign key(class_id) references s_dept(id) on delete cascade

   );

   五种约束:  无约束的地方不用写constraint。

   1) not null

   2) unique

   3) primary key

   4) foreign key  references (on delete cascade)

   5) check

 两种位置定义约束的      区别:

   1) 约束前面是逗号就是表一级,

      约束前面是空格就是列一级;

 2) not null只能定义在列一级

   3) 联合键只能定义在表一级

      eg:联合唯一: unique(last_name,first_name)

   联合主健: primary key(product_id,order_id)     

  on delete cascade:该句在子表最后声明时,说明他的数据随外键的消失而消失

   删除父表记录

  1)写了on delete cascade

    sql: delete from fathertable where id=1;

  2)没写on delete cascade  

    sql: delete from sontables where fk=1;

         delete from fathertable where id=1;   

         

 3 用子查询建表          

  1) 表的列名,列数,类型靠子查询定

     create table luxw04

     as

       select id,last_name,dept_id,start_date

       from s_emp

       where dept_id in(41,42);

              

     create table asalary

     as 

        select dept_id,avg(salary)

        from s_emp

        group  by dept_id; 

 

 

 

  2) 主sql规定了列名,列的个数,不能定义列的类型

     在建表过程中只保留了非空(not null)约束,其他约束丢失  

     create table asalary

     (did,avgsal)

     as

       select dept_id,avg(salary)

        from s_emp

        group  by dept_id;   

  3) 可以制定约束

     create table luxw06

     (id primary key,

      last_name,

      dept_id references s_dept(id),

      start_date default sysdate

     )

     as

       select id,last_name,dept_id,start_date

       from s_emp

       where dept_id in(41,42);  

         

  约束和数据的关系:

  谁先进入表,谁说了算    

 

 Data dictionary(表的集合):

  1) 表:存放描述数据库状态的数据 

        db server在建库时建立

        由db server维护,在线动态更新

        user只能查询

  2)user:由用户创建的 ,属于这个用户的。

    all: 用户有权使用

    dictionary: 保存了所有数据字典的名字,和描述信息

   

  3)查出yesq5表personid列上的唯一性约束的名字

    用到下面这两个表:

    user_constraints

    user_cons_columns

   

    select cons.constraint_name,cons.constraint_type,cols.column_name

    from user_constraints cons,user_cons_columns cols

    where cons.constraint_name=cols.constraint_name

      and cons.table_name='YESQ5'

      and cols.column_name='PERSONID'; 

     

DML:

  insert:

  * 1) 全表插入,值的顺序,类型,个数必须和表里的列一致

      insert into luxw8

      values(1,'zhangsan','m','12-sep-98');

      insert into luxw8

      values(2,'lisi','f',null);

      insert into luxw8

      values(3,'wangwu','f', to_date('23-06-08','dd-mm-rr'));        

         

      insert into luxw8

      values(4,'lisi','f',&da); 

     

  * 2)选择插入,列的个数,类型,顺序必须和指定的相等

     选择时非空的列必须出现

insert into luxw8(id,name,sex)

     values(5,'huxz','m');

 

     insert into luxw8(name,id)

     values('wangwu',6);

    

     insert into luxw8(name,sex)

     values('liucy','m');     ----->error 无PK        

   3)insert into luxw8(id,name)

     values('7','liucy')

     values('8','luxw');    ---->error    不能同时添加两个数据

     insert into luxw8(id,name)

     values(&idd,&na);  

    

   子查询提供值,值的类型和个数要匹配

     insert into luxw8(id,name)

     select id,last_name

     from s_emp

     where dept_id=45; 

update:

   1) update  luxw8

      set name='sun'

      where id=1;

   2)update  luxw8

      set name='fengwang',sex='m',registdate=sysdate

      where id=2;

delete:

   delete from luxw8

   where id between 2 and 5;  

  

 Transaction(事务):必须具有原子性

 

 ACID

 A:原子性,加钱和减钱都要成功或都失败,保持原子性;

 C:一致性,数据一致性,如:A向B转帐5000块,那B就应该收到5000块,不能多也不能少;

 I:隔离性,两个SQL语句的操作只操作自己的,不能影响到另一个语句,也就是相当于每个SQL都要有自己的回滚段;

 D:持久性,数据的改变用commit或用rollback,让数据持久化;

 

  1) 一组不可再分的sql命令组成的集合,   如果分了数据将不统一,如:银行转帐

     事务的大小跟业务需求有关

  2) 事务结束时结果

     success:   commit   回滚段内的数据写到FILE,锁释放,其它用户也可以看到结果

     fail:      rollback  清空回滚段内容,没写到FILE,锁释放,其它用户看不到修改的值,

  3)

     insert update  delete update  delete commit;

     create--->auto commit;

     insert

     update

     delete

     create --->auto commit;

     insert

     update

     rollback;   

     insert update delete  exit      

 

        

 

 

 

 

 

 

 

 

============================================================================

 

 

  第五天: 

DDL:

 alter:改表结构

 1)增加一列,添加到表的最后一列

   alter table luxw8

   add(age number(3) default 18 check(age<40)); 

  

 2)删除一列(在oracle8i)

   alter table luxw8

   drop (age,registdate);

  

   alter table luxw8

   drop column age;

 

 3)更改列名(在oracle9i)

   alter table luxw8

   rename column oldname to newname;   

 4)更改列(类型,size,添加约束,添加默认值)

   alter table luxw8

   modify(name varchar2(20) default user unique);

   如果表里没有数据,随便改

   如果表里有数据,改的时候必须符合表里的数据

   alter table luxw8

   modify(sex not null);  

   非空约束只能用modify子句加

  

 5)添加约束

   联合键约束加的时候只能用add子句

   alter table luxw8

   add unique(personid);

   alter table luxw8

   add constraint luxw8_personid_uk unique(personid);

  

        当A表的PK是B表的FK且B表的PK是A表的FK时,

         只能先让一个表(A表)的FK为空,再用add以表结构向该表(A表)添加FK,如下:

   create table product

   ( id number(7) primary key,

     name varchar2(15) not null,

     price number,

     b_id number(7)

   );

   create table bid

   ( id number(7) primary key,

     userid number(7) references users(id),

     bprice number,

     product_id number(7) references product(id)

   ); 

   alter table product

   add foreign key(b_id) references bid(id);

  

 6)删除约束

   alter table luxw8

   drop constraint luxw8_personid_nn ;

   alter table luxw8

   drop primary key cascade;

        

  7)失效约束

   alter table luxw8

   disable constraint luxw8_personid_uk;

  

   alter table luxw8

   disable constraint luxw8_id_pk cascade;

级联失效

 

 

8)生效约束

   alter table luxw8

   enable constraint luxw8_personid_uk;

   alter table luxw8

   enable constraint luxw8_id_pk;

   生效时无法级联,只能手动一个一个做   

rename oldtablename to newtablename     改表名

 truncate table tablename;  截取表 

drop table tablename cascade constraint;

 删除父表,并且级联删除子表的外键约束

Sequence:

   数据库提供的产生一系列唯一值的对象,用来生成主键值;

   它是数据库里独立的对象,不依赖任何表

 

 1)create sequence seq1

   increment by 1   //每次递增1

   start with 100                 //从100开始计数

   maxvalue 99999             //最大值为99999

   nocycle               //无循环

   nocache;    //没有缓冲

   

   create sequence sql_seq

        increment by 1

        nocycle;

  

2) nextval:

       如果有cache取出cache下一个可用的值

       如果没有cache,取出序列下一个可用的值

                   insert into  sql_users(id,name,passwd,phone,email)

                   values( sql_seq.nextval,'wangwu','123456abc', 12321,'kdfdfk@gmail.com');

                  

                   select seq2.nextval

                   from dual; 

                    

    currval:当前的连接最后一次使用序列的值

        select seq1.currval

        from dual;

       

   last_number(column):序列下一个可用的值

        select last_number

        from user_sequences

        where sequence_name='SEQ2';  

       

 3)改序列

   alter sequence seq1

   increment by   maxval   minval   cycle    cache

   序列的起始值不可能改变    

  

 4)删除序列

   drop sequence seq1;

  

 5) insert  insert insert rollback; 

    只能朝前走                    

==========================================

 view:

   起了名字的查询语句

   1) create view emp_v1

      as  select id,last_name,dept_id

          from s_emp;

    

     select * from emp_v1;   

    

     简化select语句的复杂度

     限制数据的显示

     节省空间

  

 

 

   2) 复杂视图:里面包含了函数,连接,组函数 

          不能应用DML(增删改),只能查询

      简单视图:      

               

      create view emp_v3  

      (dept_id,asalary)

      as

         select dept_id,avg(salary)

         from s_emp

         group by dept_id;

        

     update emp_v3

     set asalary=1111

     where dept_id=41;   ---->error

  

  3)create view emp_v4

    as

      select id,last_name,dept_id

      from s_emp

      where dept_id=41

with check option constraint emp_v4_ck; //表示该视图(emp_v4)里的数据无法删除或改变,但可以添加数据

  

  

   创建数据库用户:

 create user username identified by password

 default tablespace users

 temprory tablespace temp;

 

 alter user username identified by newpassword;

 

 grant resource,connect to username;

 grant create view to cksd0804;

 

 revoke create view from cksd0804;        

 

 

  至少掌握数据库以下四点:

     1)crud(增删改查)

     2)create table(建表)

     3)transaction(事务)

     4)create sequence   //sequence:序列

 

 JDBC跟下面有很大的联系:

 1  interface

 2  try catch  finally

 3  thread

 4  static{}

 5  socket (url)

 6  encapsulation inheritance poly...   javabean  

 7  collection  map

 

 

 建立表空间  
       create   tablespace   si   datafile   '/u/oradata/en73/si.dat'   size   70M     online  
          default   storage   (   pctincrease   2   );  
  建立用户  
       create   user   zhangwf  identified   by   pwd  default   tablespace   si   temporary   tablespace   si;  
  给用户授权  
       grant   dba,   connect,   resource,   create   table   to   si;  
  建立表在用户SI上  
      create   table   si.tbname(col1   int,col2   varchar2(10));  

修改密码:alter user zhangwf  identified by   newpwd

 

 

 

 

 

 

 

 

考点:行列转换, 重复数据的过滤,索引的建立


UML 方面

标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值