一,oracle数据自增 在MySQL中自增使用主键和自增来实现,但是oracle中没有自增,oracle使用触发器,在用户执行之前先执行,实现主键自增。 定义一个oracle主键自增的触发器: 1,先定义一个teacher表
create table teachers( tid number primary key, tname varchar(20) )2,写触发器实现主键自增 对于这种错误:去掉 of sid就好了 Seq_s.currval :获取当前序列序列号 Seq_s.Nextval : 获取下一个序列号 3,测试: 从41自增是因为之前用过这个触发器
select seq_s.nextval from dual;二,自适应:当不知道需要一个什么类型的时候,就把他定义成一个自定义类型,让它去自适应。 1,定义自适应的存储过程: 2,测试,执行存储过程 三,数据闪回: 1,数据闪回:在oracle中删除了表中的数据,记得不要commit,要rollback。万一commit了除了跑路,还有数据闪回可以挽回损失,找回删除的数据。 比如:把teachers表中的数据删除了(于2019-5-27:00:32删除) 2,找到数据存在之前的时间点,查找那个时间点上的数据(注意:只能闪回你上一步删除的数据,我把teachers删除了之后,又把emp表给删除了,所以只能闪回emp,不能闪回teacheras) 查找时间点:
select to_timestamp('2019-05-27:00:32','yyyy-MM-DD hh24:MI') from dual;3,查找时间点上的数据:
select * from emp as of timestamp to_timestamp('2019-5-27 00:32:00','YYYY-MM-DD hh24:MI:SS')4,把那个时间点上的数据添加到原表中
insert into emp select * from emp as of timestamp to_timestamp('2019-5-27 00:32:00','YYYY-MM-DD hh24:MI:SS')然后再查找emp,发现数据回来了,teachers算他倒霉,被我找不回来了。 四,表闪回: 如果把表删除了,你可不能rollback,对表的操作是ddl语言,操作后不会进入回滚区。我们发现用数据闪回实现不了表的闪回。 1,把emp表给删了 2,查看所有表:发现emp表变成了一个地址,这个表进入到了垃圾回收站,显示的就是垃圾的地址。
select * from tab;3,从垃圾站闪回emp表
flashback table emp to before drop4,设置开启行移动功能
alter table emp enable row movement5,闪回某一时刻上的表
flashback table emp to timestamp to_timestamp('2019-05-26 10:30:00','YYYY-MM-DD hh24:MI:SS') ddl语言和dml语言的区别: Ddl:数据定义 语言(操作表结构) create – drop-- alter --modify,数据不会进入回滚段,是直接操作 Dml:数据操作语言(操作表数据) insert-- delete-- update-- select,数据先进入回滚段,commit就直接操作,rollback就又回到操作之前的状态 Truncate和delete的区别 1:Truncate截断表,先删后建,delete是直接删空表数据 2:Truncate删除之后id从1开始,delete删除之后接着最大值开始 3:Truncate是ddl语言,delete是dml语言,Truncate不记录到回滚段,delete是先把数据存入回滚段 4:Truncate速度快与delete 对垃圾站的操作: 1,从回收站闪回表 flashback table 表名 to before drop2,彻底删除回收站里的某一个表
purge table 表名3,清空回收站
purge recyclebin五,导入和导出: 把数据导出,换工作环境,然后导入,继续工作。在软件上自带导入导出,我们学习das命令的导入导出(oracle导入导出的是用户) 1,导出数据(exp): 创建用户,创建表,给用户的表里面添加数据: 在dos窗口导出这个用户yangyang/yangyang 在d盘看到导出的文件 2,导入:imp,为了测试,先删除表中类容 查看表中类容发现导入了数据: