oracle容易笔记学习3

oracle简单笔记学习3
外键
被参照的表是主表

create table major_sun( --(主表,父表)被参照的表
mid number(2) primary key,
manme varchar2(30)
);
insert  into major_sun values(1,'computer');
insert  into major_sun values(2,'music');
insert  into major_sun values(3,'movie');
create table student_sun( --(从表,子表)参照其他表的表
id number(5) primary key,
name varchar2(20),
mid number(2),
constraint student_mid_sun_fk foreign key(mid)
references major_sun(mid)
);

insert into student_sun values(101,'peter',1);
insert into student_sun values(102,'sun',3);
insert into student_sun values(103,'king',2);

select s.name,m.manme //外连接
from student_sun s join major_sun m on s.mid=m.mid
and s.name='sun';
试图增加一个学生记录,指定一个不存在的学生编码
insert into student_sun values(110,'adsd',10);
-----报错,没有找到父项关键字
-------表示在父表中没有编码为10的 专业
ORA-02291: integrity constraint (OPENLAB.STUDENT_MID_SUN_FK) violated - parent key not found
完整性约束 openlan.这个外键被 违反--父键没有找到

delete from major_sun where mid=1; --试图删除1专业
这样会导致数据不完整的,这样的删除是不允许的
ORA-02292: integrity constraint (OPENLAB.STUDENT_MID_SUN_FK) violated - child record found
子记录已经找到

--建立子表时,外键约束增加设定条件 --(从表,子表)参照其他表的表
create table student_sun(
id number(5) primary key,
name varchar2(20),
mid number(2),
constraint student_mid_sun_fk foreign key(mid)
references major_sun(mid)
on delete  cascade
);
cascade  是级联的意思,就是在删除外键的时候会把子表中的相关的元素也删掉
create table student_sun(
id number(5) primary key,
name varchar2(20),
mid number(2),
constraint student_mid_sun_fk foreign key(mid)
references major_sun(mid)
on delete set null
);
删除后把相关的元素设置成null数值
insert/delete/update
create   table mydept_sun(
id number(2) primary key,
name varchar2(20),
locaction varchar2(20)
)
insert into mydept_sun
select  deptno,dname,loc from dept;
create table emp_sun(
id number(4) primary key,
name varchar2(20),
deptno number(20)
)
insert into emp_sun values(1234,'perter',10);
insert into emp_sun(id,name,deptno)
select empno, ename, deptno from   emp where deptno=10;
-------完整复制一个表
create table emp_bak
as
select * from emp;
-----复制表结构 ,不复制数据
create table emp_bak   as
select * from emp
where 1=0;
-----update
update emp_sun set sal=1000
where empno=7369; ---更改多个字段,set后使用,
update emp_sun set sal=1200,deptno=20,job='salesman'
where empno=7369
------delete
delete from emp_sun where deptno=30;
------------->事务 dml与事务相关,, ddl操作会隐式的提交事务
开始于第一条dml语句
下一个事务的开始就是上一个事务的结束
显示的终止一个事务commit , rollback  
事务特性, *原子性 *一致性 *隔离性 *持久性
事务语句commit/rollback/savepoint
create table temp_sun(id numeber primary key)
insert into temp_sun values(1);
savepoint A;
insert into temp_sun values(2);
savepoint B;
insert into temp_sun values(3);
savepoint C;
insert into temp_sun values(4)
savepoint D;
rollback --->全没有了 rollback to B 还剩下两条1,2,之后的信息都没有了
----------数据库的主要对象
表 table
视图 view
索引 index
序列 sequence
约束条件
同义词
---------------视图
create  or  replace  view     v_emp_sun     as    select   ename,sal, deptno   from emp_sun;
--创建视图 create view v_emp_sun  as   select ename,sal, comm from emp_sun;
select * from v_emp_sun;
--->删除视图 drop view v_emp_sun;
desc v_emp_sun;
-----数据字典
user_tables
user_views user_constraints
desc user_tables;
select  table_name from user_table;
row num<20
select * from user_table
where table_name='EMP'; ----查emp表的信息
-----------看看视图的结构user_views
desc user_views
select text from user_views
where view_name='V_EMP_SUN';
---------->>>数据字典
user_tables:当前用户名下所有的表
all_tables:当前用户能访问的所有的表 自己的表加上其他用户允许自己访问的表
dba_tables:数据库下所有的表
user_objects:对象
select distinct object_type from user_objects //table,index,sequence.....
select  count(*) from user_objects; user_tables all_objects all_tables;
---------视图的列名字不能用()
---------创建复杂视图
where view_name='V_EMP_SUN'
create or replace view emp_sum_sun
as
select deptno,sum(sal) sum_sal
from emp
group by deptno;

--------->索引
user_index 用户名下的索引
rowid是该条目所对 对应的oracleserver物理地址
当创建唯一约束的时候,索引自动创建
select constraint_name  from user_constraints
where table_name='asd'; ------查询索引名字

create index emp_sun_idx on
emp(ename); --在emp表上ename这个字段上建立索引叫做emp_sun_idx
单行函数 这些是导致索引不可用的
表达式
隐式数据类型
like
not
is null