|
外键
被参照的表是主表
create table major_sun(--(主表,父表)被参照的表
mid number(2) primary key,
manmevarchar2(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(--(从表,子表)参照其他表的表
idnumber(5)primary key,
namevarchar2(20),
midnumber(2),
constraintstudent_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(
idnumber(5)primary key,
namevarchar2(20),
midnumber(2),
constraintstudent_mid_sun_fk foreign key(mid)
references major_sun(mid)
ondelete cascade
);
cascade 是级联的意思,就是在删除外键的时候会把子表中的相关的元素也删掉
create table student_sun(
idnumber(5)primary key,
namevarchar2(20),
midnumber(2),
constraintstudent_mid_sun_fk foreign key(mid)
references major_sun(mid)
on delete set null
);
删除后把相关的元素设置成null数值
insert/delete/update
create tablemydept_sun(
idnumber(2)primary key,
namevarchar2(20),
locactionvarchar2(20)
)
insert into mydept_sun
select deptno,dname,loc from dept;
create table emp_sun(
id number(4)primary key,
namevarchar2(20),
deptnonumber(20)
)
insert into emp_sun values(1234,'perter',10);
insert into emp_sun(id,name,deptno)
select empno,ename,deptnofrom 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;
--创建视图createviewv_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_viewsuser_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 textfrom 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_tablesall_objectsall_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
isnull |
|