一.dml,ddl,dcl三者的区别
dml包括select,dpdate,insert,delect,就像它们的名字一样,这4条命令是对数据库数据进行操作
ddl主要命令drop,alter,create等,DDL主要是用来定义或改变表的结构
dcl数据库控制功能,用来设置或更改数据库用户或角色权限的语句
二。drop,delect,truncate三者的区别
drop属于DDL语句 立马执行,不仅删除表的数据而且表的结构也会删除
delect属于dml 语句 需要先把删除的数据放到回滚段中,可以回滚,删除的时候可以按照条件删除,会触发触发器
truncate属于ddl语句 会立马执行,只删除数据,不会删除表建构,删除数据时候不会放到回滚段中,会立马删除,不会触发触发器
注意:上面提到了 drop和truncate删除后无法回滚,那么如何找回这些数据呢?
用drop删除以后:show recyclebin;(在回收站中找回内容)
flash back table emp to before drop;(闪回)
如果回收站中有两个相同的表,闪回的时候是闪回的最后一个,遵循后进先出额度原则
误删除的数据也可以恢复:
inser into emp select * from emp as of timestamp to_time stamp('2016-07-31 16:54:00','YYYY-MM-DD HH24:MI:SS');
(21)修改表结构
<1>增加新的一列:add
alter table emp add(kills number)
<2>修改列
alter table emp modify(name varchar2(300))
<3>删除列 drop
alter table emp drop column kills
当然执行删除列时需要权限
(22)《1》索引:一种用于提升查询效率的数据库对象,通过快速定位数据方法,减少磁盘I/O操作,索引信息与表独立存放
《2》索引的分类:1.聚集索引:物理位置上真正排序了 索引顺序和物理顺序一致
2.非聚集性索引:物理位置上并没有排序
《3》创建索引的两种方式:1.自动创建——在定义主键或唯一键约束时 系统自动在相应的字段上创建唯一性索引
2.手动创建=用户可以在其它列上创建非唯一的索引,以加速查询
《4》索引的优缺点
优点:1.大大加快了数据的检索速度
2.创建唯一性索引,保证数据库中每一行数据的唯一性
3.加速表与表之间的连接
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间
缺点 :1.索引需要占物理空间
2.当对表中的数据进行增删该查时候,索引也需要动态维护,降低了数据的维护速度
创建索引的语法:
create index 索引名 on 表名(字段)
索引名一般以index_开头
oracle中的索引
1.B树索引
2.降序索引
3.函数索引
create index index_emp_ename on emp(lower(ename))
sekect* from emp where lower(ename)='smith'
使用 set autotrace on;把执行计划打开
4.位图索引
在查询低基数字段上使用位图索引可以提高查询性能
删除索引语法: drop index 索引名
《6》创建索引的原则
1. 在where group by order by 子句中出现最频繁的列上
2.在连接条件上加索引
3.在5M一下的表中,查询返回的结果在5%左右数据时 使用索引
(23)序列: oracle 产出的不间断的一个唯一数字用作主键
《1》创建主键
create sequence seq-article minvalue 0 start with 0 increment by1;
《2》插入数据
insert into article values(seq-article.nextval,'内容1‘,'内容2');
(24)约束
《1》主键约束
primary key : 不能重复,不能为空,字段约束
eg: id number primary key;
<2> 非空约束 not null
eg: name varchar2(30) not null;
<3> 唯一约束
unique
name varchar2(30) unique; 通过关键字unique 给name加上唯一约束,值不能重复,增加name时,name就不能重复了
<4>检查性约束 check
age number check (age between 0 and 150);
<5>默认约束
garde number(1) default;
<6> 外键约束
pid number references person(pid) on delete cascade;
--建立约束:book_pid_fk,与person中的Pid为主-外键关系
--constraint book_pid_fk foreign key(pid) references person(pid);
<7>级联删除
create sequence seq-article minvalue 0 start with 0 increment by 1 on delete cascade;
(25)伪列 rownum
每一张表都有一列字段名叫rownum,数据类型number 每一个字段用来表示一列
select* from emp where rownun<=5;
口诀:小于直接查,大于加行号
select * from (select e.*,rownum r from emp e) where r>=6 and r<=10;
面试题:各种类型的分页语句
1.oracle 使用rownum
select* from emp where rownum<=5
2.mysql
select * from limit 0,5
3.sql server
select top 5* from emp;
(26) 三范式
《1》定义:规则
《2》数据库模型
1.层次型(树形结构)
2.网状
3. 关系型数据库
关系型数据库ER图
entity 实体
relationship 关系
实体用矩形表示,实体属性使用椭圆表示,实体之间关系用菱形表示
4面向对象数据库
第一范式:
1.要有主键 2.列不可分:每个主键都是原子属性
第二范式
如果表中有组合组键的时候和,非主键字段不能够依赖于部分主键
第三范式
不能有传递依赖