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实体----》表(存放数据)
2属性---》列
3关系---》外键
- 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。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图。